[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>

* 「式が終わっていないときに、セミコロンで打ち切ることはできない」のでエラー。

* 「式が終わっていないときに、改行があると、式の継続として扱われる」。

* 「式が終わっていないときに、セミコロンがあると、式の継続として扱われる」というルールでは《ない》。

前の現象をルールで言い表せば・・

* 「式が終わっているときに、改行があると、独立の式の並列として扱われる」。

* 「式が終わっているときに、セミコロンがあると、独立の式の並列として扱われる」。これは同じ。