2013-07-26 2 views
1

다음 문자열이 있는데 그 끝에 문자 'd'를 추가하는 메서드를 정의하려고합니다. 이 작업을 수행하는 한 가지 방법은 class << str 관용구를 사용하는 것입니다.오브젝트 값에 액세스하는 오브젝트 메소드 정의?

str = 'abc' 


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

다음 구문을 사용하여이를 수행 할 수있는 방법이 있습니까?

def str.frob 
     return str + 'd' 
end 

나는이 작업을 수행하려고

나는 str가 정당하지 않은 경우 singleton_method #frob은, 자신의 지역 범위가 있기 때문에 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 

당신은 오류가 발생했습니다 얻을. 따라서 합법적 인 오류가 발생했습니다. 이 메서드는 object_id, 79771730을 갖는 개체 "abc"에 만들어집니다.

+0

구문 'p self'의 의미는 무엇입니까? – user784637

+0

@ user784637'p'는'puts'와 같고,'print'는'#frob' 메서드 안에'self'가 무엇인지 보여주기 위해 사용됩니다. –

관련 문제