[ruby-list:50582] Re: [質問] 変数pが定義されている時のabsの動作について
From:
Tadashi Saito <tad.a.digger@...>
Date:
2017-09-05 12:55:42 UTC
List:
ruby-list #50582
斎藤と申します。おもしろい問題ですね。 個人的にはなんとなく既視感があるのですが、過去のメール・チケットの 中からは、自分はうまく見つけられませんでした。 Konishiさんが先に投稿されたことで大方カバーされていると思いますが、 自分が調べた点を一つ。 ちなみに、ruby 2.4.1p111での動作です。 > 手元で試した限り、同名の変数の有無によって振る舞いが変わるのは、 1.8.7〜2.4の全ての系列で同じでした。もっと古いRubyについては、 まだ試していません。 ruby 1.8.7 (2012-06-29 patchlevel 370) [x86_64-linux] ruby 1.9.3p551 (2014-11-13 revision 48407) [x86_64-linux] ruby 2.0.0p648 (2015-12-16 revision 53162) [x86_64-linux] ruby 2.1.10p492 (2016-04-01 revision 54464) [x86_64-linux] ruby 2.2.7p470 (2017-03-28 revision 58194) [x86_64-linux] ruby 2.3.4p301 (2017-03-30 revision 58214) [x86_64-linux] ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux] (ちなみに、pが引数をそのまま返り値として返すようになるのは1.9から で、1.8.7までは nil が返ります。そのため、1.8.7の実行では (p(-1.3)).abs に 対しては nil.abs が実行され、その結果エラーになりました。) 以上のように、伝統的な振る舞いである(うっかり変えると悲劇が起きそうな) のは分かったのですが、これがバグなのか・そうでないのか、JIS/ISO規格の どこに書いてあるのか・未定義なのか・はたまた規格違反な振る舞いのか、 あたりは、自分には判断が付きませんでした。 もし詳しい方が答えてくだされば、自分としてはうれしいです。 -- 斎藤 匡