ruby でスペースによるメソッドコールが可能な文脈は?


ruby ではスペースによって引数付きのメソッドコールを表すことができますが、これがどういうタイミングで可能なのかが分からないな、と思っています。

例えば、以下ではメソッドコールは成功します。

[code]

    [1] pry(main)> ([1].take 1).to_s
    => "[1]"
    
[/code]

しかし、以下では成功しません。

[code]

    [2] pry(main)> true ? [1] : [0].take 1
    SyntaxError: unexpected tINTEGER, expecting end-of-input
    true ? [1] : [0].take 1
                          ^
    
[/code]

この失敗している例において、文法的な解釈として、 `[0].take 1`
をひとつのメソッドコールとして解釈してくれてもいいかと思いましたが、(それ以外に正しい式の木を構築する方法がないはずなので)そうはなっていない様子です。

### 質問

ruby においてスペースによってメソッドコールができる文脈は何ですか?




[rubyの演算子順位表](https://docs.ruby-
lang.org/ja/latest/doc/spec=2foperator.html)を見ればいいと思います。  
`()`は演算順位が一番高く、`()`なしは演算順位が一番低い(`()`なしについては公式のドキュメントが見つけられませんでしたが)ので、

[code]

    true ? [1] : [0].take 1
    
[/code]

は演算順位が高い`?:(条件演算子)`が先に解釈されて

[code]

    (true ? [1] : [0].take) 1
    
[/code]

と同じ意味になり、

[code]

    [1] 1
    
[/code]

という意味になるので文法エラーになるのだと思います。

> ruby においてスペースによってメソッドコールができる文脈は何ですか?

これについては、[rubyの演算子順位表](https://docs.ruby-
lang.org/ja/latest/doc/spec=2foperator.html)を見ながら適宜確認するしかないと思います。  
(普通はそれは面倒なので怪しいところには`()`をつけてしまいます。)




[rubyの演算子順位表](https://docs.ruby-
lang.org/ja/latest/doc/spec=2foperator.html)を見ればいいと思います。  
`()`は演算順位が一番高く、`()`なしは演算順位が一番低い(`()`なしについては公式のドキュメントが見つけられませんでしたが)ので、

[code]

    true ? [1] : [0].take 1
    
[/code]

は演算順位が高い`?:(条件演算子)`が先に解釈されて

[code]

    (true ? [1] : [0].take) 1
    
[/code]

と同じ意味になり、

[code]

    [1] 1
    
[/code]

という意味になるので文法エラーになるのだと思います。

> ruby においてスペースによってメソッドコールができる文脈は何ですか?

これについては、[rubyの演算子順位表](https://docs.ruby-
lang.org/ja/latest/doc/spec=2foperator.html)を見ながら適宜確認するしかないと思います。  
(普通はそれは面倒なので怪しいところには`()`をつけてしまいます。)

