Ruby语言的&运算符

1.用于方法的接收者

此时的 & 运算符称为安全导航(Safe Navigation)运算符。

运算符描述
接收者&.方法名()如果接收者为 nil,则不运行方法调用,直接返回 nil
如果接收者不为 nil,则就跟正常方法调用一样。

2.用于方法的参数

使用场景描述
&块形参名用于将普通的块定义转换为 proc 方式的 Proc 对象。
&块实参值用于将任何实现了 to_proc 方法的对象转换为普通的块定义。
#&块形参名
#原始代码
def sequence(n, m, c)
  i = 0
  while(i < n)
    yield i*m + c
    i += 1
  end
end

sequence(5, 2, 2) {|x| puts x }  # 2 4 6 8 10

#更改后
def sequence(n, m, c, &b)
  i = 0
  while(i < n)
    b.call(i*m + c)
    i += 1
  end
end

sequence(5, 2, 2) {|x| puts x }  # 2 4 6 8 10
#&块实参值
#原始代码
a, b = [1, 2, 3], [4, 5]
sum = a.inject(0) {|total,x| total + x }    # 6
sum = b.inject(sum) {|total,x| total + x }  # 15

#更改后
a, b = [1, 2, 3], [4, 5]
summation = Proc.new {|total,x| total + x }
sum = a.inject(0, &summation)    # 6
sum = b.inject(sum, &summation)  # 15

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/experience/rubyexp/36676.html

(0)
huoxiaoqiang的头像huoxiaoqiang
上一篇 1天前
下一篇 1天前

相关推荐

发表回复

登录后才能评论