0

「Why'sguide」を読んでいて、rubyターミナルのいくつかのコマンドを並べて試しています。1つのことが一致しません。Ruby1.9.3を実行しています。

この本では、有効なコマンドは次のとおりです。

if 1890..1913 === 1895
   echo "works"
end

しかし、私がこれをするとき、それは私にただ与えます

warning: (irb):27: warning: integer literal in conditional range
=> nil

いくつかのより魅力的な実験

1895..1913 === 1895
> ArgumentError: bad value for range
from (irb):31
from /usr/bin/irb:12:in `<main>'

x = 1895..1913
x === 1895
> true

(pythonから)最後の2つの実行は同じだと思っていたので、これは興味深いですが、そうではないようです。これらすべての実験が失敗した理由と、===がどのように機能するかについて、誰かがより多くの洞察を明らかにできるでしょうか。

4

2 に答える 2

12

1895..1913 === 1895はと同じで1895..(1913 === 1895)、必要なのは(1895..1913) === 1895です。

Ruby演算子の優先順位を参照してください。

于 2013-01-10T12:57:37.510 に答える
0

ここでの問題は括弧にあるようです。
Rubyは、行をどのように評価するかを適切に推測できません。

たとえば、次のように機能します。

(1895..1913) === 1895
于 2013-01-10T12:57:45.453 に答える