Skip to content

Commit 771d0ca

Browse files
Watson1978claude
andcommitted
Binding#implicit_parameters 系 3 メソッドを追加 (Ruby 4.0)
Ruby 4.0 で Binding#implicit_parameters, #implicit_parameter_get, #implicit_parameter_defined? が追加された (Bug #21049)。 番号指定パラメータと it パラメータにアクセスするためのメソッドで、 同じチケットで local_variables 系が番号指定パラメータを扱わなくなったこと (PR rurema#3264 で反映済み) に対応する代替 API にあたる。 実機で登場バージョンを確認した結果 3.3 / 3.4 には存在せず 4.0 で追加された ため #@SInCE 4.0 で分岐した。 あわせて local_variables の 4.0 注記から implicit_parameters への導線を 追加した。「番号指定パラメータは local_variables に含まれない」とだけ書かれ ていると、ではどう取得するのかが分からないため。 実機で確認した仕様: - implicit_parameters は [:it] / [:_1, :_2] / [] を返す - implicit_parameter_get は未定義のパラメータで NameError - implicit_parameter_defined? は未定義なら false を返すが、番号指定でも it でもない名前 (通常のローカル変数名など) を渡すと NameError になる Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 0f53391 commit 771d0ca

1 file changed

Lines changed: 83 additions & 0 deletions

File tree

manual/api/_builtin/Binding.md

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ end
149149
```
150150

151151
番号指定パラメータ自体は従来どおり参照できます([ref:d:spec/call#numbered_parameters])。
152+
[c:Binding] から番号指定パラメータを扱うには [m:Binding#implicit_parameters] を使用してください。
152153
#@end
153154

154155
このメソッドは以下のコードと同様の動作をします。
@@ -158,6 +159,88 @@ binding.eval("local_variables")
158159
```
159160

160161
#@# #8779 を参照。
162+
#@since 4.0
163+
### def implicit_parameters -> [Symbol]
164+
165+
self のスコープで定義されている番号指定パラメータおよび it パラメータの名前を
166+
[c:Symbol] の配列で返します。定義されていない場合は空の配列を返します。
167+
168+
これらは [m:Binding#local_variables] の返り値には含まれません。
169+
170+
```ruby
171+
[42].each do
172+
it
173+
p binding.implicit_parameters # => [:it]
174+
end
175+
176+
{ k: 42 }.each do
177+
_2
178+
p binding.implicit_parameters # => [:_1, :_2]
179+
end
180+
181+
# どちらも使っていない場合
182+
p binding.implicit_parameters # => []
183+
```
184+
185+
- **SEE** [m:Binding#implicit_parameter_get], [m:Binding#implicit_parameter_defined?], [m:Binding#local_variables]
186+
187+
### def implicit_parameter_get(symbol) -> object
188+
189+
引数 symbol で指定した番号指定パラメータまたは it パラメータの値を返します。
190+
191+
- **param** `symbol` -- 番号指定パラメータまたは it パラメータの名前を [c:Symbol] で指定します。
192+
193+
- **raise** `NameError` -- 指定した名前が番号指定パラメータでも it パラメータでもない場合に発生します。
194+
195+
- **raise** `NameError` -- 指定したパラメータが self のスコープで定義されていない場合に発生します。
196+
197+
```ruby
198+
[42].each do
199+
it
200+
p binding.implicit_parameter_get(:it) # => 42
201+
end
202+
203+
{ k: 42 }.each do
204+
_2
205+
p binding.implicit_parameter_get(:_1) # => :k
206+
p binding.implicit_parameter_get(:_2) # => 42
207+
end
208+
```
209+
210+
- **SEE** [m:Binding#implicit_parameters], [m:Binding#implicit_parameter_defined?]
211+
212+
### def implicit_parameter_defined?(symbol) -> bool
213+
214+
引数 symbol で指定した番号指定パラメータまたは it パラメータが self のスコープで
215+
定義されている場合に true を、そうでない場合に false を返します。
216+
217+
定義されていない場合に false を返すのは、symbol が番号指定パラメータまたは
218+
it パラメータの名前である場合だけです。それ以外の名前を指定した場合は
219+
[c:NameError] が発生します。
220+
221+
- **param** `symbol` -- 番号指定パラメータまたは it パラメータの名前を [c:Symbol] で指定します。
222+
223+
- **raise** `NameError` -- 指定した名前が番号指定パラメータでも it パラメータでもない場合に発生します。
224+
225+
```ruby
226+
[42].each do
227+
it
228+
p binding.implicit_parameter_defined?(:it) # => true
229+
p binding.implicit_parameter_defined?(:_1) # => false
230+
end
231+
232+
{ k: 42 }.each do
233+
_2
234+
p binding.implicit_parameter_defined?(:_1) # => true
235+
p binding.implicit_parameter_defined?(:_3) # => false
236+
p binding.implicit_parameter_defined?(:it) # => false
237+
end
238+
```
239+
240+
- **SEE** [m:Binding#implicit_parameters], [m:Binding#implicit_parameter_get]
241+
242+
#@end
243+
161244
### def receiver -> object
162245

163246
保持するコンテキスト内での self を返します。

0 commit comments

Comments
 (0)