1

我有以下字符串,并想定义一个方法来将字母“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)

4

1 回答 1

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”上创建的。

于 2013-07-26T19:28:19.173 回答