何时在模块方法中使用 self

2024-03-01

我的模块定义如下所示:

module RG::Stats
  def self.sum(a, args = {})
    a.inject(0){ |accum, i| accum + i }
  end
end

要使用此方法,我只需要包含此定义的文件,以便我可以执行以下操作:

RG::Stats.sum(array)

并且

RG::Stats.method(:sum)

但是,如果我需要知道使用的方法列表RG::Stats.instance_methods我得到一个空数组。这是因为我用过self。如果我省略self then RG::Stats.instance_methods给出了方法列表,但我无法再访问它们。

问题是:如何使用self在模块的方法定义中?


Use self在每个方法定义中,如果您希望仅在模块的单例类中定义方法(其中使用定义的方法self居住)。省略自我和extend self如果您希望模块的方法同时定义为实例方法和单例方法。

例如,您可以使用以下方式调用该方法RG::Stats.sum(array)并且仍然将其列出instance_methods方法,如果你这样做:

module RG::Stats
  extend self

  def sum(a, args = {})
    a.inject(0){ |accum, i| accum + i }
  end
end

这样,sum方法被定义为实例方法,使用后包含在模块的单例类中extend self.

您可以检查实例方法RG::Stats模块来验证这一点:

RG::Stats.instance_methods
=> [:sum]

使用这种技术,您不必担心在没有self关键字,因为模块不能有实例,所以它不能像实例方法一样被调用RG::Stats模块。只能作为单例方法调用RG::Stats.sum(array)感谢extend self陈述。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

何时在模块方法中使用 self 的相关文章

  • 如何将 Ruby 编译为 Javascript? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在研究一段逻辑 我想在服务器和浏览器中表达它 类似于验证表单 其中基于已输入的内容 元素之间必须存在某些逻辑关系 所以 如果我可以编写
  • 具有来自包含器类的静态方法调用的 Ruby 模块

    我需要在模块中定义使用包含该模块的类中的方法的常量 module B def self included base class lt lt base CONST self find end end end class A def self
  • Rails :include 与 :joins

    这更多的是一个 为什么事情会这样运作 的问题 而不是一个 我不知道该怎么做 的问题 因此 提取您知道将要使用的关联记录的福音是使用 include因为您将获得连接并避免一大堆额外的查询 Post all include gt comment
  • 在 Ruby 中模拟 int64 溢出

    我是一名资深程序员 但对 Ruby 还很陌生 我正在尝试移植一种名为 CheckRevision 的算法 用于在登录 Battle net 的在线游戏服务之前检查游戏文件的完整性 该算法使用给定的公式对文件进行 哈希 没有无聊的细节 而是不
  • 命令行 Ruby 函数的手册页

    有没有办法从命令行获取 Ruby 函数的手册 像 funcR 中的手册页 The ri工具在这里可能会有所帮助 http rubylearning com satishtalim ruby ri tool html ri Array ri
  • Erlang 参与者与 OOP 对象有何不同?

    假设我有一个 Erlang actor 定义如下 counter Num gt receive From increment gt From self new value Num 1 counter Num 1 end 同样 我有一个 Ru
  • Marshal 无法使用默认过程转储哈希(TypeError)

    我有这个 ruby 脚本 可以生成哈希并将其保存到文件中 有时该文件不存在或为空 所以我总是先检查它是否存在 然后我将旧值加载到我的哈希中并尝试再次保存 我已经为此苦苦挣扎了很长一段时间 这是一个示例 newAppName ARGV 0 n
  • 无法在 Eclipse 4.2 上安装 Aptana 插件

    我已经安装了 Eclipse 4 2 Juno 现在我想安装 aptana 来开发 ruby 但出现以下错误 无法读取存储库http download aptana com studio3 plugin install content ja
  • Ruby On Rails 更新 Heroku 动态路由

    我有一个使用应用程序范围的 slugs 的应用程序 使用懒惰的宝石 https github com RISCfuture slugalicious与 Sluggable 表 并使用以下代码路由到这些 slugs Slugs begin S
  • 如何使用 File#flock 发出非阻塞独占锁请求?

    如何申请非阻塞锁 为什么 Ruby 没有文件 flock http www ruby doc org core 2 0 File html method i flock当单独尝试锁定文件时是否按预期工作 将文件锁定在块中并不是此问题的正确解
  • 散列到分组数组中

    我对 ruby 的经验不是很丰富 所以我正在努力格式化一段数据 我有这个哈希 其中包含一些具有相同值的键 例如 key gt value1 key2 gt value2 key3 gt value3 key4 gt value1 key5
  • 覆盖 gem 的 lib 文件夹中的私有方法

    spree auth devise gem 中有一个私有方法 该方法位于控制器 UserSessionsController 内部https github com spree spree auth devise blob master li
  • Ruby:检查字符串是否可以转换为整数[重复]

    这个问题在这里已经有答案了 可能的重复 使用 Ruby 测试字符串是否基本上是引号中的整数 https stackoverflow com questions 1235863 test if a string is basically an
  • 当你说 Ruby 是反射型时,这主要是指“鸭子类型”吗?

    我正在读一篇描述 Ruby 的文章 其中写道 Ruby 被认为是 反思性的 语言 因为有可能 Ruby 程序分析自身 在 其构成条款 使 调整其工作方式 以及 甚至用其他代码覆盖自己的代码 代码 我对 反射 这个术语感到困惑 这主要是在谈论
  • 设备中的嵌套资源

    我是 Rails 新手 我想要一些关于我的路线和正确的路由逻辑的建议 我正在开发一个非常简单的应用程序 用户可以在其中发布列表 用户 设计模型 有很多列表 并且该列表属于一个用户 我的列表中有一个 user id integer 当用户成功
  • Hstore 和 Rails

    我正在尝试使用最新版本的 activerecord postgres hstore gem 在 Rails 3 2 9 项目中使用 Hstore 但在使用 ActiveRecord 提供的 store accessor 来获取 Hstore
  • 如何将 Headless chrome 与水豚和硒一起使用

    Chrome版本 59 0 3071 104 使用Cucumber Capybara Selenium实现Headless Chrome的自动化测试 功能 支持 env rb require rubygems require capybar
  • 导入数千条记录后无法推送到 Heroku

    我有一个问题 我认为我的 sqlite3 数据库太大 我将大约 100 000 条记录导入到数据库中 并且能够 git Push 和 git Push heroku 现在我可能犯了一个错误 导入了太多记录 500 000 我能够推送到 gi
  • Ruby Stack 无法在 Google Developers Console 上部署

    我尝试使用 Google Developers Console 部署 Ruby 堆栈 但没有成功 我在其他项目中尝试了几次 错误总是相同的 如下 你知道为什么它总是失败吗 2014 10 23 15 59 44 rubyStackBox P
  • 删除记录时出现SystemStackError(堆栈级别太深)

    删除记录时出现 Stack Overflow 错误 SystemStackError 堆栈级别太深 应用程序 控制器 orders controller rb 18 在 销毁 中 我发现了另一个与 ruby 相关的系统堆栈错误 但我没有完全

随机推荐

  • 使用 MPI 和 C++ 从不同节点收集数据

    我正在开发一个包含多个从节点和一个主节点的项目 在某些时候 我需要将来自不同从节点 主节点也可以视为从节点 的数据收集到主节点 数据可以是任何类型 但我们假设它是 unsigned int 这就是数据在从节点上的样子 节点0 块01 块02
  • 在 [code] 和 [php] 标签内查找 URL [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我的字符串是这样的 string Link 1 code This is a textual line www google com
  • Jackson:忽略父类属性

    有什么方法可以告诉杰克逊在序列化子类时忽略父类的属性吗 class Parent private String parentProperty1 private String parentProperty2 getter setter Ign
  • 如何使用 MVVM 和 MVVM 工具包将属性绑定到文本框?

    我是 MVVM 新手 为了学习 我创建了一个示例应用程序 以便在单击按钮时在文本框中显示消息 在我的代码中 按钮命令工作正常 但该属性未绑定到文本框 如何使用 MVVM 将属性绑定到文本框 我的代码类似于下面给出的 View
  • ASP.NET vNext - 本地化 (.resx)

    如何使用 resx 文件通过 ASP NET vNext 云优化模式 进行本地化以及如何为当前线程设置区域性 System Threading Thread CurrentThread CurrentCulture System Threa
  • 为什么这个函数将RAX压入堆栈作为第一个操作?

    在下面的 C 源代码汇编中 为什么RAX被压入堆栈 据我从 ABI 的了解 RAX 可以包含调用函数中的任何内容 但我们将其保存在这里 然后将堆栈向后移动 8 个字节 所以我认为堆栈上的 RAX 只与std throw bad functi
  • 如何解决“允许的内存大小已耗尽”错误?

    我正在使用 phpspreadsheet 我想修改一个包含 4 张纸的 xlsx 文件 我只想在 2 张表中插入数据 但我想将所有 4 张表复制到新的 xlsx 文件中 当我这样做时 我收到此错误 致命错误 允许的内存大小 53687091
  • 是否有高级 Ag-Grid 事件来侦听列状态的任何更改?

    我将 Ag Grid 与 Angular 一起使用 我想听听any修改列状态的事件 截至目前 我必须列出所有事件 columnVisible onCol event columnMoved onCol event etc 是否有我可以依赖的
  • 在 python 中查询返回本地范围的对象

    下面是返回的程序function函数中定义的类型对象f其堆栈帧 f1 在程序退出之前仍然存在 下面是返回的程序int类型对象 值为1024 但返回后栈帧不存在int类型对象 根据上面两个图 为什么返回类型机制存在这种差异 当您返回时 框架不
  • 如何使用 XSLT 合并两个 xml 文件

    我有两个 xml 文件 需要使用 XSLT 将它们合并为一个 第一个 XML 是 原始 XML
  • 如何计算php中2个unix时间戳之间的间隔而不除以86400(60 * 60 * 24)

    我有 2 个 unix 时间戳 我位于亚太地区 奥克兰时区 GMT 12 夏令时 GMT 13 我想计算两个时间戳之间的天数间隔 其中一个在夏令时内 一个不在夏令时内 我的示例日期是 7 Feb 2009 1233925200 to 21
  • 什么是 Git?我为什么需要它?

    我对编程还很陌生 但我觉得我已经掌握了它的窍门 并且我正在尽力学习 我一直读到 Git 对于编程项目来说绝对至关重要 但我似乎无法弄清楚它实际上是什么does 谷歌也不想告诉我 该网站称其为 分布式版本控制系统 呃 嗯 有人可以向新手解释一
  • 后台工作者 while 循环

    我想要创建的是一个后台工作者 每 30 秒执行几个进程 但我希望只要程序启动就执行这个 while 循环 这是我正在使用的 private void watcherprocess1 backgroundWorker1 RunWorkerAs
  • python 中的 crontab

    我正在用 python 为某种守护进程编写代码 该守护进程必须在由 crontab 字符串定义的特定时间实例执行特定操作 有我可以使用的模块吗 如果没有 有人可以粘贴 链接一个算法 我可以用它来检查 crontab 定义的时间实例是否在上次
  • 相对于 DBUnit 数据集中当前的日期

    我想知道是否有任何方法可以指定例如明天作为 DBUnit XML 数据集中的日期 有时 未来日期和过去日期的代码逻辑是不同的 我想测试这两种情况 当然 我可以指定 2239 年 11 月 5 日之类的日期 并确保测试在此日期之前有效 但是否
  • 当遵守里氏替换原则(LSP)时,子类可以实现额外的接口吗?

    考虑这个红宝石示例 class Animal def walk In our universe all animals walk even whales puts walking end def run Implementing to co
  • 从 mysql 查询创建数组。 Column2 作为键 Column 1 作为值

    我有一张表 其中包含 column 1 state column 2 link Alabama auburn alabama com Alabama bham alabama com Alabama dothan alabama com 我
  • 如何发送带有查询字符串作为查询字符串的 URL

    我正在执行从一个页面到另一个页面的重定向 以及从第二页面到第三页面的另一个重定向 我有来自第一页的信息 该信息未在第二页上使用 但必须转移到第三页 是否可以将第三页的 URL 及其查询字符串作为查询字符串发送到第二页 这是一个例子 Resp
  • Android 进度条未更新

    我在更新进度条时遇到问题 我正在单独的线程中更新进度条 并在另一个线程中更新进度条进度所依赖的变量 这是一个类变量 因此 进度对话框显示但始终为 0 不更新进度 请帮帮我 public void setProgressbar progres
  • 何时在模块方法中使用 self

    我的模块定义如下所示 module RG Stats def self sum a args a inject 0 accum i accum i end end 要使用此方法 我只需要包含此定义的文件 以便我可以执行以下操作 RG Sta