定义访问对象值的对象方法?

时间:2013-07-26 19:25:36

标签: ruby

我有以下字符串,并且想要定义一个方法,将字母'd'追加到它的末尾。我能做到这一点的一种方法是使用class << str成语。

str = 'abc'


class << str
   def frob
      return self + "d"
   end
end

我可以使用以下语法执行此操作吗?

def str.frob
        return str + 'd'
end

当我尝试这样做时,我得到undefined local variable or method 'str' for "abc":String (NameError)

1 个答案:

答案 0 :(得分:1)

str = 'abc'
def str.frob
  p self
  return self + 'd'
end
p str.frob 
# >> "abc"
# >> "abcd"
str.singleton_methods # => [:frob]
str.object_id # => 79771730

您收到错误是因为 singleton_method #frob有自己的本地范围,其中str不合法。因此,你得到了合法的错误。该方法是在具有 object_id,79771730 的对象“abc”上创建的。