2012-03-13 2 views
4

to_sto_str도 큰 따옴표가 붙은 문자열 보간에서 객체가 참조 될 때 호출되는 것처럼 보입니다. 예를 들면 :Ruby의 기본 문자열 보간 동작을 메서드로 재정의하는 방법이 있습니까?

# UPDATE: This example actually works as expected. See update below. 
class Foo 
    def to_s 
    'foo' 
    end 

    def to_str 
    to_s 
    end 
end 

"#{Foo.new}" # result: "#<Foo:0x007fb115c512a0>" 

내가 반환 값 "foo"를 만들기 위해 할 수있는 일이있다 생각하지 않는다?

UPDATE

사과를하지만,이 코드는 실제로 작동합니다. 다른 코드를 잘못 입력하십시오.

+0

가 잘못된 정보에 근거했다하더라도, 질문 자체가 to_s''모르는 사람들에게 좋은 가치를 제공 않습니다. 그래서 ... 잘 했어! :) – Phrogz

답변

5

이러한 결과가 나타나는 루비 버전은 무엇입니까? 이것은 루비 1.9.2과 1.8.6와 나를 위해 올바르게 작동 :

class Foo 
    def to_s 
    'hi mom' 
    end 
end 

puts "#{Foo.new}" 
#=> hi mom 
4

문자열을 반환하지 않습니다. to_s은 문자열 표현을 반환하고 출력하지 않으므로 puts을 삭제하십시오.

참고 :이 응답은 to_s 메서드의 코드가 puts "foo" 인 이전 버전의 질문을 기반으로합니다.

+1

그는 * 뭔가를 돌려주고 있습니다. (루비에서 뭔가를 돌려주지 않는 것이 불가능하기 때문에), 그것은 단지 그가 원하는 것이 아닙니다. 보간은'nil'을 반환 할 때'to_s'를 무시한다는 것이 실제로 궁금합니다. –

+0

@Andrew Marshall ['nil.to_s'은 ""] (http://ruby-doc.org/core-1.9.3/NilClass.html#method-i-to_s). – steenslag

+0

@steenslag' "# "'이 아니기 때문에'nil' 리턴 값은 무시됩니다. –

관련 문제