🙆♀️
[Bug #21117] _1 と it で動作に差異があるというバグ報告
[Bug #21117] Inconsistent behaviour between "_1" and "it" variables
- Ruby 3.4 では
_1の別名としてitが追加されました - この
itは_1と同様に『ブロックの第一引数を参照する』特別な構文になります
# .map { |it| it * 2 } と同等
pp (1..10).map { it * 2 }
-
_1とitは同じ機能ではあるんですが、以下のように差異があるというバグ報告
# it 変数に再代入することは可能
pp [1, 2, 3].map { it = it + 1; it }
# => [2, 3, 4]
# _1 では SyntaxError になる
pp [1, 2, 3].map { _1 = _1 + 1; _1 }
# => [2, 3, 4]
- これなんですが
_1は意図的に同名での変数定義は禁止されています - なので以下のようなコードでも SyntaxError になります
# error: _1 is reserved for numbered parameters
_1 = 42
- 一方で
itは互換性の問題からitという名前の変数定義は許容されています
# OK
it = 42
-
itに関しては互換性を保つ必要がるのでいろいろとややこしいんですよねえ - 詳しくは以下を参照してください
- 他にも
_1とitで差異があるケースがあるのでそのうちまとめたい
Discussion