■
[ruby-list:45668] Re: 複数行にわたる式の評価
irb(main):001:0> x = 10 * ( 1 ; + 2 ; + 4 ) => 40 irb(main):007:0> x = 10 * ( 1 irb(main):008:1> + 2 irb(main):009:1> + 4 ) => 40
これの奇妙な点は、「セミコロン(;)を括弧の中に入れることができる」「括弧の中に複数の式を《並列》させることができる」という点だな。
* 「複数の式が《並列》した場合には、最後の式の値が全体の値となる」というルールは、括弧()においても適用される。
セミコロンと改行とは等価ではない。
irb(main):003:0> x = 10 * ( 1 + ; 2 + ; 4 ) SyntaxError: compile error (irb):3: syntax error, unexpected ';' x = 10 * ( 1 + ; 2 + ; 4 ) ^ from (irb):3 from :0 irb(main):004:0>
irb(main):004:0> x = 10 * ( 1 + irb(main):005:1* 2 + irb(main):006:1* 4 ) => 70 irb(main):007:0>
* 「式が終わっていないときに、セミコロンで打ち切ることはできない」のでエラー。
* 「式が終わっていないときに、改行があると、式の継続として扱われる」。
* 「式が終わっていないときに、セミコロンがあると、式の継続として扱われる」というルールでは《ない》。
前の現象をルールで言い表せば・・
* 「式が終わっているときに、改行があると、独立の式の並列として扱われる」。
* 「式が終わっているときに、セミコロンがあると、独立の式の並列として扱われる」。これは同じ。