Bug #1215
closedirb doesn't finish evaluate on !false => false
Description
=begin
$ irb1.9 -f
irb(main):001:0> RUBY_DESCRIPTION
=> "ruby 1.9.2dev (2009-02-25 trunk 22626) [i686-linux]"
irb(main):002:0> false
=> false
irb(main):003:0> false.define_singleton_method(:!){p "!false"; false}
=> #<Proc:0x8dd716c@(irb):3 (lambda)>
irb(main):004:0> false
"!false"
"!false"
irb(main):005:0>
irb(main):006:0*
irb(main):007:0*
irb(main):008:0* irb(main):008:0> => false
!false が false を返すような状況だと、irb が式を評価した結果を返さないようです。
手元では、^D を何度か押すと評価した結果が返りました。上の例では、005 から 007 までは
Enter を、008 のところでは ^D を 2 回入力しています。
るりまには、
主に論理式の評価に伴って副作用を引き起こすことを目的に
再定義するものと想定されています。
と書かれているので、バグと言えるのかは微妙な気もしますが、
irb 側で何とかならないものでしょうか?
=end
Updated by matz (Yukihiro Matsumoto) about 15 years ago
- Status changed from Open to Rejected
=begin
=end
Updated by matz (Yukihiro Matsumoto) about 15 years ago
=begin
まつもと ゆきひろです
In message "Re: [ruby-dev:38087] [Bug #1215] irb doesn't finish evaluate on !false => false"
on Thu, 26 Feb 2009 10:02:45 +0900, Nobuhiro IMAI redmine@ruby-lang.org writes:
|!false が false を返すような状況だと、irb が式を評価した結果を返さないようです。
|手元では、^D を何度か押すと評価した結果が返りました。上の例では、005 から 007 までは
|Enter を、008 のところでは ^D を 2 回入力しています。
|
|るりまには、
|
|> 主に論理式の評価に伴って副作用を引き起こすことを目的に
|> 再定義するものと想定されています。
|
|と書かれているので、バグと言えるのかは微妙な気もしますが、
|irb 側で何とかならないものでしょうか?
無理でしょうね。falseのような基本的なオブジェクトの!を再定義
した場合でも正当に動作するプログラムを記述することは困難です。
そんな負担をライブラリ作者に負わせたくありません。!の再定義
はあくまでも自己責任で。
=end