加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何处理碰巧在Ruby中成为关键字的关键字参数?

发布时间:2020-12-17 03:33:09 所属栏目:百科 来源:网络整理
导读:给定以下方法,它接受两个关键字参数begin和end: def make_range(begin: 0,end: -1) # ...end 我可以毫无问题地调用这个方法: make_range(begin: 2,end: 4) 但是在实现方法时我如何使用关键字参数,因为两者都恰好是Ruby keywords? 这显然不起作用: def ma
给定以下方法,它接受两个关键字参数begin和end:

def make_range(begin: 0,end: -1)
  # ...
end

我可以毫无问题地调用这个方法:

make_range(begin: 2,end: 4)

但是在实现方法时我如何使用关键字参数,因为两者都恰好是Ruby keywords?

这显然不起作用:

def make_range(begin: 0,end: -1)
  begin..end
end

请注意,这只是一个示例,问题适用于所有关键字,而不仅仅是开始和结束.

解决方法

轻松解决方案

请查找其他变量名称. (例如minmax或range_begin和range_end)

复杂的解决方案

local_variable_get

你可以使用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

关键字参数/哈希参数

您也可以使用keyword arguments.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读