🗂

[Bug #20468] for 文でぼっち演算子を用いた場合の代入について

2024/05/15に公開

[Bug #20468] Segfault on safe navigation in for target

  • 次のように for 文でぼっち演算子を使うと segv するというバグ報告
for foo&.bar in []; end
  • こういうコードかけるんですね知らんかった
  • 上記のようなコードだとループ毎に内部で foo.bar= が呼ばれるんですね
class Foo
  def bar=(value)
    pp value
  end
end

foo = Foo.new
nil&.bar = 1
# 内部で foo.bar = が呼ばれる
for foo.bar in [1, 2, 3]; end
__END__
output:
1
2
3
for temp in [1, 2, 3]
  foo&.bar = temp
end
  • ちなみに単に nil と書いた場合は SyntaxError になりますね
# error: Can't assign to nil (SyntaxError)
for nil in [1, 2, 3]; end
GitHubで編集を提案

Discussion