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

ruby – 传递缺席参数

发布时间:2020-12-17 03:40:21 所属栏目:百科 来源:网络整理
导读:我看到了默认参数的特定代码气味.也就是说,当一个方法为其中一个参数设置了默认值但调用者传递的是nil而不是没有传递任何值时.在大多数情况下,这是因为调用者有一个哈希值,它试图从哈希值中传递一个特定的值.特别: def foo(params) ... bar(params[:first],
我看到了默认参数的特定代码气味.也就是说,当一个方法为其中一个参数设置了默认值但调用者传递的是nil而不是没有传递任何值时.在大多数情况下,这是因为调用者有一个哈希值,它试图从哈希值中传递一个特定的值.特别:

def foo(params)
  ...
  bar(params[:first],params[:second]) # :second doesn't exist
end

def bar(first,second = 2)
end

foo的第二个参数不会成为默认值,但会变为零.我看到这种处理的最常见方式是功能栏中的第一行是:

second ||= 2

有没有更好的方法来处理这个?也就是说,只要nil或者没有传递param,就分配一个默认值.

解决方法

def bar(first,second = 2)

如果省略参数,则将秒设置为2. nil是一个有意义的值,所以传递nil作为参数的值明确地告诉它为nil.这是有目的的,因此如果需要,您可以使用nil覆盖默认值.

如果你想让你的参数分配一个默认值,如果它被省略或为nil,那么|| =是这样做的惯用方法.

def bar(first,second = nil)
  second ||= 2
  puts second
end

bar 1      #=> 2
bar 1,3   #=> 3
bar 1,nil #=> 2

second = nil允许您省略参数,并指定默认值为nil.如果参数为零,则可以将其设置为实际默认值.这意味着传入nil并省略参数现在基本上是相同的.

它的行为方式并不普遍,因为有时你想用nil替换默认参数.默认参数的工作方式允许您这样做.

(编辑:李大同)

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

    推荐文章
      热点阅读