ruby - 引数 - 文字列の問題へのシンボル



ruby シンボル 変数 (3)

次のコードが失敗する

world = :world
result = 'hello' + world
puts result #=> can't convert Symbol into String

次のコードの動作

world = :world
result = "hello #{world}"
puts result #=> hello world

どうして?

ルビー1.8.7を使用して


worldが数字の場合も同じ動作が起こります。

"hello" + 1 # Doesn't work in Ruby
"hello #{1}" # Works in Ruby

文字列を何かに追加したい場合は、 to_str上にto_strを実装してください:

irb(main):001:0> o = Object.new
=> #<Object:0x134bae0>
irb(main):002:0> "hello" + o
TypeError: can't convert Object into String
        from (irb):2:in `+'
        from (irb):2
        from C:/Ruby19/bin/irb:12:in `<main>'
irb(main):003:0> def o.to_str() "object" end
=> nil
irb(main):004:0> "hello" + o
=> "helloobject"

to_sは "私を文字列に変換できます"を意味し、 to_strは "すべての目的と目的のために、私は文字列です"を意味します。


シンボルは文字列ではないため、明示的に変換することなく連結することはできません。 これを試して:

result = 'hello ' + world.to_s
puts result

補足として、あなたはいつでもメソッドを自分で定義することができます:)

ruby-1.9.2-p0 > class Symbol
ruby-1.9.2-p0 ?>  def +(arg)
ruby-1.9.2-p0 ?>    [to_s, arg].join(" ")
ruby-1.9.2-p0 ?>    end
ruby-1.9.2-p0 ?>  end
 => nil 
ruby-1.9.2-p0 > :hello + "world"
 => "hello world" 




symbols