【发布时间】:2021-08-21 10:29:57
【问题描述】:
在 Ruby 3 中,引入了新的 ... 语法,允许如下构造:
def locked_run(...)
lock
run(...)
unlock
end
这在此处记录:https://rubyreferences.github.io/rubychanges/3.0.html
经过这次讨论 (https://bugs.ruby-lang.org/issues/16378),决定也加入位置参数:
def block_section(name, ...)
section(name, true, ...)
end
但是,以下仍然会导致语法错误:
def block_section(...)
section(block_section: true, ...)
end
为什么... 允许使用位置参数,但不允许使用命名参数?
【问题讨论】:
-
这不是完全您的问题的答案,但您能不能在这里指定
**options作为方法参数,并在下面指定**options.merge(block_section: true)? -
但是,如果您的方法也可能期望接收位置参数,这将不起作用。
-
在链接讨论中Matz也explains做出这个决定的原因,即支持
send和method_missing。
标签: ruby named-parameters positional-parameter ruby-3