2016-09-23 5 views
0

to_sメソッドを構築する際に問題があります。オブジェクトを参照するto_sの複数行構文

class Personne 
    attr_accessor :prenom, :nom, :email, :telephone, :adresse 
    def initialize 
     @prenom = @nom = @email = @telephone = "" 
     @adresse = Adresse.new 
    end 
    def to_s 
     @prenom + ", " + @nom + "\n" + \ 
     "Email: " + @email + "\n" + \ 
     "Tel: " + @telephone + "\n" + \ 
     @adresse 
    end 
end 

@adresseは、非常によく似たメソッドです。 エラー:

in `+': no implicit conversion of Adresse into String (TypeError) 

アドレスオブジェクトは、それ自身のprintメソッドを持っているので、私は、問題を理解していません。

+0

しかし、オブジェクトに対して '+'を呼び出すだけです。 '@ adrense.to_s'を実行しようとしました – Aleksey

+0

ありがとう、それはうまくいきましたが、どうしてobjctのto_sを明示的に呼び出す必要があるのか​​わかりません:/ – user3685089

+0

' @prenom = @nom = @email = @telephone = "" 'は可変文字列の変更に副作用があります:' @email << "[email protected]" 'は他のインスタンス変数の予期しない変更をもたらします。 – mudasobwa

答えて

0

I do not understand the issue, since address object has it's own print method.

あなたは文字列で呼び出さ+メソッドの引数としてクラスAdresseのインスタンスを渡している、それは引数としてStringクラスのインスタンスを期待するので、それは、エラーがスローされます。

この作業を行うには、たとえばto_sメソッドを使用して文字列に変換します。

+ @adresse.to_s # would do it for you 
+0

はい、自動トリガー標準であるか、to_s、wrightを上書きする必要がありますか? – user3685089

+0

@ user3685089いいえ、それを明示的にStringにキャストする必要があります –

+0

@AndreyDeineko:私はあなたの最初の文は真実ではないと思います。 OPは 'Adresse'のインスタンスに対して' + 'を呼び出さない。彼は 'Adresse'を引数として文字列に' + 'を呼び出します。 – spickermann

0

some_string + objectは、オブジェクトにto_sをトリガしません。

class Personne 
    attr_accessor :prenom, :nom, :email, :telephone, :adresse 

    def initialize 
    @prenom = '' 
    @nom  = '' 
    @email  = '' 
    @telephone = '' 
    @adresse = Adresse.new 
    end 

    def to_s 
    "#{prenom}, #{nom}\nEmail: #{email}\nTel: #{telephone}\n#{adresse}" 
    end 
end 

追記:同じ文字列へ@prenom = @nom = @email = @telephone = ""セットのすべての属性をあなたは、文字列の補間("#{some_string}#{object}")を使用するか、またはexplizitly(some_string + object.to_sを)to_sを呼び出す必要がありますする必要があります。 @nom << 'foo'のようなものを@emailよりも変更した場合も同様に変更されます。この例を参照してください:

foo = bar = '' 
foo << 'foo' 
#=> "foo" 
bar 
#=> "foo" 

したがって、initializeメソッドも変更しました。

関連する問題