From: "tompng (tomoya ishida) via ruby-core" Date: 2025-02-08T13:36:21+00:00 Subject: [ruby-core:120913] [Ruby master Bug#21117] Inconsistent behaviour between "_1" and "it" variables Issue #21117 has been updated by tompng (tomoya ishida). Prism and parse.y parses these two code in the example differently. ~~~ruby [1, 2, 3].each { it = it + 1; p it } [1, 2, 3].each { it += 1; p it } ~~~ I think `it` was designed not to break old code that uses local variable `it`, so maybe it should be parsed as same as the code below, just like parse.y does. ~~~ruby [1, 2, 3].each { it2 = it2 + 1; p it2 } [1, 2, 3].each { it2 += 1; p it2 } ~~~ ---------------------------------------- Bug #21117: Inconsistent behaviour between "_1" and "it" variables https://bugs.ruby-lang.org/issues/21117#change-111795 * Author: radarek (Rados��aw Bu��at) * Status: Open * ruby -v: ruby 3.4.1 (2024-12-25 revision 48d4efcb85) +PRISM [arm64-darwin24] * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN ---------------------------------------- I believe variables `_1` and `it` should have consistent behaviour and the same as normal local variables. Here are inconsistencies: ```ruby # 1. Assigning new value [1, 2, 3].each { |v| v = v + 1; p v } # works as expected [1, 2, 3].each { it = it + 1; p it } # works as expected [1, 2, 3].each { _1 = _1 + 1; p _1 } # SyntaxError # 2. Using operators like += on them [1, 2, 3].each { |v| v += 1; p v } # works as expected [1, 2, 3].each { it += 1; p it } # SyntaxError but I expected it to work correctly after 1st point [1, 2, 3].each { _1 += 1; p _1 } # works, which is inconsistent with 1 point # however, this one does not work [1, 2, 3].map { _1 += 1 } # runtime error is raised: undefined method '+' for nil (NoMethodError) ``` If both `_1` and `it` are advertised as block local variables then I would expect that overwriting works correctly, both using expressions like `_1 = _1 + 1` and `_1 *= 2`. -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/