From: matz@... (Yukihiro Matsumoto) Date: 2002-05-08T08:28:27+09:00 Subject: [ruby-list:35009] Re: 式にならない文← a = 4 ; p((a < 3) or (a > 5)) まつもと ゆきひろです In message "[ruby-list:35000] 式にならない文← a = 4 ; p((a < 3) or (a > 5))" on 02/05/07, Take_tk writes: |「true && false」と「true and false」の扱いが異なる理由は『「=」よりも優 |先順位が低い演算子』かどうかによる、ということでよろしいでしょうか? よろしいです。 |(同趣旨ですがもうちょっと詳しい言い方) | |文(実行単位)を引数の括弧の中や「=」の右辺に置いたときに、 |(A)式として自動的に解釈される文 (例:true && false) |(B)式として自動的には解釈されない文 (例:true and false) |がある。 この文章は同じ意味じゃありません。というか、全然違う意味です。 |「=」よりも優先順位が低い演算子で構成された文(true and false、not true) |^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |は、引数の括弧の中や「=」の右辺に置いても、自動的には式として解釈されな |い(B)。評価の対象となりえない文と解釈されるのでエラーになる(void |context)。引数を囲む括弧の他に、式であることを明示するための括弧が必要。 | |という理解でいいでしょうか? いけません。Rubyには「式」と「文」があって、引数にしたり、代 入の右辺にできるのは「式」だけです。「文」を括弧でくくると 「式」にできます。 |( a = not ) true |( a = true ) and false | |普通にみたらやはり「a = (not true)」「a = (true and false)」と解釈して欲 |しくなる。 それは人によって感じ方は違うと思います。 # だから『普通』は危険な単語なんですね ;-) 前者はそういう括弧をつけるのではなく、単なる文法エラーですし、 後者は"and"や"or" はまさにそういう解釈をするために導入した演 算子ですから、そのように解釈されなければ困ります。 |p ( not true ) | |の場合には、カッコがあるにもかかわらず、式として評価されない、というのが |不思議。演算子の優先順位だけでは説明ができない。 引数の括弧と式の括弧は見かけ上区別がつかないことが、たけさん の混乱の原因だと思います。こればっかりは私ではどうにもなりま せん。Wolframみたいな勇気はないので。 ただ、1.7では上記は式の括弧と解釈されるのでより混乱を助長し ているというのはあるかも。 まつもと ゆきひろ /:|)