2012-07-09 4 views
0
class Item 

    def name=(name_value) 
     @name = name_value 
    end 

    def name 
     @name 
    end 

end 

의 세터 이름과 초기화에 상징 '=':루비. 첫 번째 경우에서 객체

item = Item.new 
item.name=("value") 
puts item.class 

내가 점점 계속. 두 번째 경우

Item 

:

내가

String 

item = Item.new.name=("value") 
puts item.class 

이유는 무엇입니까? 차이점을 이해하지 못합니다.

답변

3

루비는 할당 연산자의

item = Item.new.name = 'value' 

반환 값으로 두 번째 예를 볼 할당되는 값입니다. Item.new.name = 'value''value'을 반환하고 item = 'value'도 반환합니다.

class Item 
    def name=(name_value) 
    @name = "processed #{name_value}" 
    end 

    def name 
    @name 
    end 
end 

item = Item.new 
item2 = item.name = "value" # your example code 

item2 # => "value" 
item.name # => "processed value" 
0

새 항목을 만들고 이름을 설정하는 경우 이름을 설정할 때 항목 변수에 할당하는 문자열을 반환합니다. 첫 번째 양식을 사용해야합니다

하거나 액티브에서 상속 :

item = Item.new(:name=>"value") 
1

루비에서는 할당 표현식이 할당되는 값으로 평가됩니다.

즉 :

foo = 'bar' 

는 귀하의 경우,

그래서 'bar'로 평가보다 관용구 다음과 같이 기록 될 것입니다

Item.new.name=("value") 

:

Item.new.name = 'value' 

할당되는 값은 'value' 문자열입니다.

그래서, Item.new.name = 'value'

item = Item.new.name = 'value' 

item = 'value' 

하고 결국 평가하는 수단 (물론, name= 메소드 호출의 부작용과 함께) 'value' 평가 item의 값은 'value'이며 String입니다.

+1

우리의 답변은 다음과 같습니다. –

관련 문제