14. Rubyクイズ 解答、解説(5)! 13
答え
誤っています。
解説
下記の ① は 3 になるが、 ② は “12” になる。
①: 1 + “2”
②: “1” + 2
この選択肢の ① と ② の両方とも実際にはエラーとなります。
> 1+”2”
TypeError: String can't be coerced into Fixnum
> “1”+2
TypeError: can't convert Fixnum into String
Ruby/Rails勉強会@関西 第55回 「Numeric クラスについて」
15. Rubyクイズ 解答、解説(5)! 14
解説
String#coerce を定義すると、 1 + “2” を 3 にすることができます。
class String
def coerce(other)
coerced= case other
when Integer
self.to_i
when
self.to_f
end
return coerced, other
end
end
p(1 + “2”) #=> 3
Ruby/Rails勉強会@関西 第55回 「Numeric クラスについて」
16. Rubyクイズ 解答、解説(5)! 15
解説
Integer#to_str を定義すると、 “1” + 2 を “12” にすることができます。
class Integer
def to_str
to_s
end
end
p(“1” + 2) #=> “12”
Ruby/Rails勉強会@関西 第55回 「Numeric クラスについて」
17. Rubyクイズ (6)! 16
【問題】
下記の記述は、正しいか誤っているか?
下記の ① は エラーになるが、 ② はエラーにならない。
①: 1/0
②: 1.0/0
Ruby/Rails勉強会@関西 第55回 「Numeric クラスについて」
18. Rubyクイズ 解答、解説(6)! 17
解説
下記の ① は エラーになるが、 ② はエラーにならない。
①: 1/0
②: 1.0/0
これは正しい記述となっています。
① の場合は ZeroDivisionError となります。
② の場合は+Infinity という浮動小数点数(Float型の値)となります。
irb> 1/0
ZeroDivisionError: divided by 0
from (irb):1:in `/'
from (irb):1
irb> 1.0 /0
=> Infinity
irb> (1.0/0).class
=> Float
Ruby/Rails勉強会@関西 第55回 「Numeric クラスについて」