我有以下字符串,并且想要定义一个方法,将字母'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)
答案 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”上创建的。