Ruby - 在类方法中引用 self

标签 ruby class methods

在 RubyMonk 上查看这段代码:

 class Item
   def initialize(item)
     @item = item
   end
   def show
     puts "The item name is: #{self}"
   end
   def to_s
     "#{@item}"
   end
 end

 Item.new("potion").show

代码通过了,但是 self 变量的使用对我来说有点模棱两可。您可以在 show 方法中轻松地将 to_s 替换为 self 并获得相同的结果。有人可以解释两种插值之间的区别以及为什么/如何在这里使用 self 吗? 此外,如果没有方法 to_s,代码将返回一个代理。这里定义to_s有什么意义呢?

最佳答案

字符串插值隐式调用对象的 to_s 方法。因此,当您在 Item 上定义 to_s 方法时,您就是在明确告诉该对象如何根据字符串表示自己。在这种情况下使用 self 是因为在 Item 对象的插值中存在对 to_s 的隐式调用。定义 to_s 显式 告诉 Item 如何在字符串中呈现自己。

有关更多详细信息,请查看 this excellent post on explicit vs. implicit conversion methods.

关于Ruby - 在类方法中引用 self,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27791208/

相关文章:

python - 这段 python 代码有什么问题吗,为什么它运行起来比 ruby​​ 慢?

C++ Nice "name"用于自己的函数

java - 井字游戏的 isEmpty 方法

java - 用字符串方法计算单词?

java - 在项目中使用不同的 Java 代码(如何访问变量)

ruby 正则表达式匹配特定字符以外的任何字符

ruby - 在 Ruby 中转义字符串

ruby-on-rails - rails 路线。这个过程是如何明确地工作的?

javascript - 对 JavaScript 原型(prototype)继承与构造函数感到困惑

c++ - 在 C++ 中如何将方法指定为析构函数而不是构造函数?