给出以下方法,它接受两个关键字参数begin
和end
:
def make_range(begin: 0, end: -1) # ... end
我可以毫无问题地调用这个方法:
make_range(begin: 2, end: 4)
但是在实现方法时我如何使用关键字参数,因为两者都恰好是Ruby 关键字?
这显然不起作用:
def make_range(begin: 0, end: -1) begin..end end
请注意,这只是一个示例,该问题适用于所有关键字,而不仅仅是begin
和end
.
请查找其他变量名称.(例如min
和max
或range_begin
和range_end
)
你可以使用binding.local_variable_get
:
def make_range(begin: 0, end: 10) (binding.local_variable_get(:begin)..binding.local_variable_get(:end)) end p make_range(begin: 10, end: 20) #=> 10..20
您还可以使用关键字参数.
def make_range(**params) (params.fetch(:begin, 0)..params.fetch(:end, 10)) end p make_range #=> 0..10 p make_range(begin: 5) #=> 5..10 p make_range(end: 5) #=> 0..5 p make_range(begin: 10, end: 20) #=> 10..20