From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?=) Date: 2002-03-26T14:42:15+09:00 Subject: [ruby-dev:16606] Re: defined? autoload constant けいじゅ@日本ラショナルソフトウェアです. In [ruby-dev :16592 ] the message: "[ruby-dev:16592] Re: defined? autoload constant ", on Mar/26 01:13(JST) Yukihiro Matsumoto writes: >まつもと ゆきひろです >|まだ, ちょっとおかしいみたい. >| >|ruby 1.6.7 (2002-03-25) [i686-linux] >| >|irb(main):007:0> def foo; p 1; 1; end >|irb(main):008:0> def bar; p 2; 2; end >|irb(main):010:0> defined?((foo+bar)) #(1) >|1 >|"method" >|irb(main):017:0> defined?(foo+(bar+foo)) #(2) >|1 >|2 >|"method" >| >|(1)はexpressionで, (2)はbarを評価するのはおかしいのでは? > >(1)はmethodでしょう。+もメソッドだから。かっこは構文解析の段 >階で消えてしまっています。 以前(今回の修正前まで)は, expressionでしたが, そっちがおかしい? >(2)は「barを呼ぶのはおかしいではないか」ということだと思うの >ですが、現状では実は引数に対しても再帰的にdefined?を適用して >るからです。やりすぎか。 たぶん. というのも, # foo定義していない. irb(main):002:0> defined?(1+foo) nil irb(main):003:0> defined?(1+(foo+bar)) nil irb(main):004:0> def foo; p 1; 1; end nil irb(main):005:0> defined?(1+foo) "method" irb(main):006:0> defined?(1+(foo+bar)) 1 nil irb(main):007:0> bar = "a" "a" irb(main):008:0> defined?(1+bar) "method" fooが定義されていないと 1+foo がnilなのは, 何か変な気がしないでもない. fooが定義されれば, 1+fooがexpressionになるならわからんでもないけど, methodなんでしょ. そうすると, fooが定義されると、1+fooがメソッドとして定 義される? __ ..............................石塚 圭樹@日本ラショナルソフトウェア... ----------------------------------->> e-mail: keiju@rational.com <<---