【一人 bugs.ruby Advent Calendar 2021】[Feature #17398] SyntaxError in endless method【14日目】

一人 bugs.ruby Advent Calendar 2021 14日目の記事になります。
今日はエンドレスメソッド定義の本体が statement だった場合にエラーになる話です。

[Feature #17398] SyntaxError in endless method

以下のようにエンドレスメソッド定義の本体が statement だった場合にエラーになる、というチケットです。

# OK
def foo() = puts("bar")

# syntax error, unexpected string literal, expecting `do' or '{' or '('
def hoge() = puts "bar"

これはチケット内でも議論があったのですが最終的には動作するように Ruby 3.1 で対応されました。

# OK
def print(value) = puts value

print(42)
# => 42

ただし、次のように def の戻り値を他のメソッドに渡す場合はシンタックスエラーになるので注意が必要です。

# syntax error, unexpected local variable or method, expecting `do' or '{' or '('
private def hoge(value) = puts value

# () を付けると OK
private def foo(value) = puts(value)