如何使用 Ruby“self”关键字

2023-12-19

我无法理解self关键词。

我了解它如何用于区分实例方法和类方法,但是当它在方法内部使用时又如何呢?

就像是:

def self.name
  self.name = "TEXT"
end

or

def name2
  self.name = "TEXT2"
end

or

class Array
  def iterate!(&code)
    self.each_with_index do |n, i|
      self[i] = code.call(n)
    end
  end
end

通常,self因为接收器可以省略,在这种情况下,通常最好这样做。然而,也有一些情况可以省略self使代码具有其他含义。

  • 一种这样的情况是,如您的示例所示self.name = ...,使用 setter 方法。 Ruby 的语法在方法和变量调用之间是不明确的,当可以解释为变量或方法的东西后面跟着=,其解释为局部变量赋值具有优先权。

  • 另一种情况是当你想调用该方法时class。还有这个关键词class,以及解释class因为关键字优先于方法。

  • 还有一种情况是当你想使用该方法时[]。此表示法也用于数组文字,将其解释为数组的优先级高于将其解释为方法的优先级。

在每种情况下,您都必须使表达式明确成为方法调用。一种方法是显式地编写接收器,即使它是self。另一种方法是写()方法之后。

关于你的例子self.each_with_index ..., the self可以省略,不推荐这样做。

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

如何使用 Ruby“self”关键字 的相关文章

  • 在 Sinatra 中缓存响应的最佳方式?

    我正在使用我用 Sinatra 制作的 API 构建一个简单的应用程序 该 API 返回一些 JSON 这是相当多的 JSON 我的应用程序的 API 依赖于对其他 API 的数百个请求 我大概可以将结果缓存 5 天左右 数据完全没有问题
  • Ruby—Open3.popen3 / 如何打印输出

    我有一个小红宝石脚本 它的作用是mysql导入方式 mysql u
  • 单表继承发现问题

    我有以下3个rails类 它们都存储在一张表中 使用rails的单表继承 class Template lt ActiveRecord Base class ThingTemplate lt Template class StockThin
  • 您将如何整理这个控制器逻辑?

    我在控制器中有一些逻辑 如果满足某些条件 它会设置对象的状态 if params concept consulted legal 0 params concept consulted marketing 1 concept attribut
  • 如何让我的导航栏出现在 Rails 应用程序的每个页面上?

    目前 我的导航栏位于我的index htm erb 文件中 目前仅在主页上显示 我想知道为了让导航栏出现在我的应用程序的每一页上 必须采取哪些必要步骤 我的导航栏的代码如下所示
  • 如何使用 LDAP 进行 Ruby on Rails 身份验证? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个网络应用程序 并且我有一个使用的身份验证方法bcrypt gem它工作正常 但我想将身份验
  • Rails-自定义删除前确认对话框的视图

    要删除 Rails 中的记录 我使用此代码 result of which I get dialog box like this But I wants this dialog box to look like this 有没有办法自定义确
  • 如何修复 AJAX 在选中复选框时始终触发?

    有时这个 AJAX 会触发 有时不会 让我解释一下 habit js document ready function habit check change function habit this parent siblings habit
  • RVM + Ruby 1.9.2 + Rmagick + Lion = 系统工作,RVM 不工作

    我已通过 RVM 在全新安装的 OS X Lion 上安装了 Ruby 1 9 2 我已经通过 homebrew 安装了 Ghostscript 和 imagemagick 当使用 RVM 运行 gem install rmagick 时
  • ruby 中的 unshift + file.join

    unshift File join File dirname FILE vendor addressable 2 1 0 lib addressable uri 上面的代码是否访问具有以下路径的文件 vendor addressable 2
  • Mongoid 4 / MongoDB 2.4+“冻结”问题

    自从使用 Mongoid 维护与 mongodb 的连接以来 我遇到了一个奇怪的问题 我认为这最初是由于升级到 Rails 4 0 需要更新 Mongoid Moped 但我在其他基于 Rack 的应用程序 具体来说是 Sinatra 和
  • ruby 中的数组切片返回不同的结果 - nil 与空数组

    我对以下事实感到困惑 如果对数组进行切片length 它返回一个空数组 但长度大于该值时 它返回nil 这是什么原因呢 例如 arr 1 2 3 4 5 这样做 在哪里y gt arr length and x是任意正整数 返回nil ar
  • 如何让 mysql 输出 DateTime 到儒略日数?

    基本上我正在使用用于 Ruby 的 MySQL gem http www tmtm org en mysql ruby 并且我对日期比较没有合理的支持 这Mysql Time类只为我提供了访问器方法 如年 月 秒等 如果我可以将其转换为 R
  • ruby 中的树结构,父子采用数组格式,没有 gem?

    我有一个数组 其中包含这样的项目列表 arr id gt 1 title gt A parent id gt nil id gt 2 title gt B parent id gt nil id gt 3 title gt A1 paren
  • Ruby 守护进程,用于使临时 Ruby 实例的对象保持活动状态

    Ruby 是否提供了一种在不同运行的 Ruby 进程之间共享变量 更重要的是 类对象和我认为对此有用的任何其他数据抽象 的机制 例如 如果我有一个类被实例化 初始化并仔细调整到某种状态 我希望该状态对我全天所有其他独立的 Ruby 和 Ir
  • `class_eval` 字符串中的变量范围是什么?

    我在用class eval编写要在当前类的上下文中执行的代码 在下面的代码中 我想添加一个用于属性值更改的计数器 class Class def attr count attr name attr name attr name to s a
  • Ruby Regex 舍入尾随零

    我正在寻找一个正则表达式来删除十进制数字中的尾随零 它应该返回以下结果 0 0002300 gt 0 00023 10 002300 gt 10 0023 100 0 gt 100 1000 gt 1000 0 0 gt 0 0 gt 0
  • 如何在 Rails 2.3.5 中从模型渲染部分

    我有一个 Rails 2 3 5 应用程序 我试图从模型中渲染几个部分 我知道 我知道 我不应该这样做 我这样做的原因是我将 Comet 服务器 APE 集成到我的 Rails 应用程序中 并且需要根据模型的事件 例如 after crea
  • Ruby 单引号和双引号

    我最近一直在使用 Ruby 进行编码 并且之前使用过 Python 据我所知 单引号和双引号对代码的工作方式没有影响 我转向 Ruby 是为了了解它是如何工作的 并研究 Ruby 和 Python 之间的相似之处 我曾经使用过单引号字符串并
  • 使用 rbenv 在 MacOS 上安装 Ruby 2.6.0 失败

    我在 Mojave 上有一台 Mac 它无法安装开发所需的一些基本内容 rbenv install 2 6 0 Downloading openssl 1 1 1d tar gz gt https dqw8nmjcqpjn7 cloudfr

随机推荐

  • JQuery 添加点击事件到单选输入文本

    我想要与单选按钮 热门 相关的标签 我开始使用 siblings 方法来实现这一点 我想一定有更好的方法 单选按钮上的单击事件如下所示 RadioButton click function event var questionId this
  • 从 C (Visual Studio) 调用 C++ 类成员函数

    我需要从 C 程序调用 C 成员函数 我在 C 代码中创建了 cpp h 包装器文件 包装了 C 成员函数 即 wrapper cpp include wrapper h extern C void wrap member1 Class m
  • 超出范围

    理想情况下 我想这样做 w 4px media max width 900px r 3px media min width 900px r 5px myclass border radius w r 这不会编译 因为 r没有在我定义的范围内
  • C#中检查线程是否正在运行

    我在 C 代码中创建了一个名为 ZipFolders 的函数 事实上 我是从 Unity 按钮调用它的 当按下它时 尝试将文件夹压缩到目录中 因为同时我想做其他事情 所以我尝试在新线程中调用该函数 我的问题是如何检查该线程是否正在运行或已停
  • 如何处理 JavaScript 中的“未定义”[重复]

    这个问题在这里已经有答案了 可能的重复 检测 JavaScript 中未定义的对象属性 https stackoverflow com questions 27509 detecting an undefined object proper
  • 为什么 Google Analytics 事件不从 onSubmit 发送?

    我想跟踪用户使用 Analytics 事件下载文件的频率 但即使事件似乎已发送 跟踪 gif 似乎并未正确到达 要下载文件 用户需要填写一份简短的表格 输入到此表单中的信息由该功能检查checkSubmit 返回false当输入的信息无效或
  • 如何在加壳器配置期间将文件复制到主机?

    我想在打包程序配置期间生成公共 私有 ssh 密钥对并将文件复制到主机 有没有办法使用打包程序将文件从虚拟机复制到主机 我想到了 文件提供程序有一个 方向 选项 允许下载而不是上传 type file source app tar gz d
  • 构建不以文件为中心的系统

    我们有一个软件基础设施 其工作方式与软件构建系统非常相似 从不同来源收集信息并用于生成一些输出 就像在传统的软件构建中一样 我们有不同类型的输出 依赖树等 主要区别在于我们的来源 中间结果和输出本质上并不是基于文件的 相反 它们是 唯一可寻
  • 不工作

    以下超链接不起作用 但当您单击 在新选项卡中打开 按钮时它会起作用 div class span12 category products style margin 0 auto div class toolbar div class row
  • 我应该使用 mysql_real_escape_string 转义预期的整数值还是可以只使用 (int)$expectedinteger

    使用cast int 代替转义是否安全 class opinion function loadbyopinionid opinionid opinionid int opinionid mysql query select from fe
  • 为什么这个数组没有索引?

    我试图将元素排序到我以这种方式构建的二维数组中 但是当代码到达二维数组时 我收到错误 数组超出索引 var categoryTempArray ProductCatalogue func sortinOut var i 0 var j 0
  • 使用prepareForSegue方法时IBOutlet属性不会更新

    我在将值传递给destinationViewController的IBOutlet属性时遇到问题 但它在普通属性上工作正常 请参阅下面的代码 void prepareForSegue UIStoryboardSegue segue send
  • 固定可滚动表格的标题

    这是一个带有固定行和列的表格 我也试图通过固定标题来改进它 IE 当您滚动表格时 标题不应滚动 它应该永久可见 是否可以 我已经尝试过了caption side top outside but top outside仅适用于 Firefox
  • 从 HTMLElement 获取 google.maps.Map 实例

    我的页面上有一张现有地图 我可以使用类似于 document getElementById 的方法来选择该元素来获取 HTMLElement javascript 对象 是否可以获取初始化地图时创建的 google maps Map 实例
  • 应用程序被终止时如何从 Firebase 向设备发送消息? [复制]

    这个问题在这里已经有答案了 我正在尝试熟悉 Firebase 通知 它工作正常 但当应用程序未打开时 我只能从通知控制台接收消息 我知道文档说 如果您的应用程序位于前台或后台 您可以在 onMessageReceived 方法中接收消息 否
  • Java 程序是否有可能比 C 中的相同程序(优化)更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有关您编写的代码的问题必须描述具体问题 and 包含有效代码重现它 在问题本身中 看SSCCE org http sscce org 以获
  • SVG getBoundingClientRect() + “transform:rotate()”在 Chrome 中以一种非常具体的方式出现错误

    getBoundingClientRect 在所有 SVG 元素上都可以正常工作 但在 Chrome 中旋转元素的情况除外 下面我画了两条线 左边的一条是对角线 右边的线从垂直开始 如黑线所示 绿色框是 getBoundingClientR
  • @ 符号在 Vue.js 中起什么作用?

    我是 Vue js 的新手 我正在查看某人的代码 我注意到他们正在使用 符号 这是做什么用的 export default methods handleCreate console log Child has been created
  • 使用 HTML 中的 Flying-Saucer 渲染 PDF 中的嵌入图像

    我有一个 xhtml 文档 我正在使用 Flyingsaucer 将其转换为 PDF xhtml 有几个标签 其中内嵌有 base64 编码的图像 xhtml 的源是动态的 因此图像标签的结构可能会有所不同 这是标签的示例 img src
  • 如何使用 Ruby“self”关键字

    我无法理解self关键词 我了解它如何用于区分实例方法和类方法 但是当它在方法内部使用时又如何呢 就像是 def self name self name TEXT end or def name2 self name TEXT2 end o