[#49804] Re: 小数点以下の表示で質問があります。 — Fumiaki Sakamoto <ght8270407fs@...>

自己レスですみません。

14 messages 2014/04/23
[#49805] Re: 小数点以下の表示で質問があります。 — "KISHIMOTO, Makoto" <ksmakoto@...4u.or.jp> 2014/04/23

きしもとです

[#49806] Re: 小数点以下の表示で質問があります。 — Fumiaki Sakamoto <ght8270407fs@...> 2014/04/23

きしもとさま

[#49808] Re: 小数点以下の表示で質問があります。 — Tetsuo Sakaguchi <saka@...> 2014/04/23

阪口です。

[ruby-list:49796] Range class?

From: "Masa" <imagine@...>
Date: 2014-04-20 10:36:04 UTC
List: ruby-list #49796
坂野正明です。

Range クラスの振舞いについて、二、三、不自然な点に
気付きました。
いずれも滅多に遭遇するものではないでしょうが、
意図された挙動では無いのではないかと思いました。
マニュアルにも特に注意書きはありません。
http://www.ruby-doc.org/core-2.1.1/Range.html
http://docs.ruby-lang.org/ja/2.1.0/class/Range.html

以下のものです。

[1] max と minmax

irb> (0...3.5).max
TypeError: cannot exclude non Integer end value
	from (irb):1:in `max'
irb> (0...3.5).minmax	# => [0, 3]

この二つが異なる結果を返すのは、期待していませんでした。
因みに、他の挙動(以下に例)は、納得できるものでした。

irb> (0...3).max	# => 2
irb> (0...3).minmax	# => [0, 2]
irb> (0...3.5).max_by.each{|i|i}	# => 3
irb> (0...3.5).minmax_by.each{|i|i}	# => [0, 3]


[2] size

irb> (1..5.1).size	# => 5
irb> (1...5.1).size	# => 5
irb> (1..5).size	# => 5
irb> (1.2..5).size	# => 4
irb> (1...5).size	# => 4
irb> (1.0...5).size	# => 4
irb> (Rational(2,3)...5).size	# => 4
irb> (Rational(1,2)...5).size	# => 4
irb> (0.5...5).size	# => 5	# Why not 4??
irb> (Rational(1,3)...5).size	# => 4

irb> (Rational(3,2)...5).size	=> 3
irb> (1.5...5).size	# => 4	# Why not 3??
irb> (1.5...4.9).size	# => 4	# Why not 3??
irb> (1.5...Rational(49,10)).size	# => 4	# Why not 3??
irb> (1.5...Rational(45,10)).size	# => 3
irb> (1.5...4.5).size	# => 3

Range の beginが Integerに一致しない Floatの時の
挙動が、他と矛盾します。
端が Integer でないときの Numericの Rangeの size()とは
何ぞや、というのは議論(考え方)があってもいいと思いますが、
同値(==)である Rationalとも返り値が異なることがあるのは
期待していませんでした。

また、最後の四例の endの Rational/Floatの例も
私の予想からは一部ずれていました。(beginはそうでは
ないけれど)endの値については、Numericの時に、
四捨五入(但し、五は切捨て?)か何かをしているように見えます。


以上です。
なお、ここで使用した Ruby は以下です。
% ruby2.1 --version
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-darwin13]

--
坂野正明




In This Thread

Prev Next