2013-07-26 36 views
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)

回答

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是不合法的。因此你得到了合法的错误。该方法创建在对象“abc”具有object_id,79771730

+0

语法'p self'是什么意思? – user784637

+0

@ user784637'p'就像'puts','print'我用来告诉你''frob'方法里面的'self'是什么。 –