Ruby 将“标识函数”作为块传递

Ruby 将“标识函数”作为块传递,ruby,Ruby,假设我有一个方法,它需要一个块。该块接收一个参数,例如: f { |n| n*n } # square 如果我想用一个只返回未更改的参数的块调用函数,它将变为 f { |n| n } # identity 有没有这样一个标识块的快捷方式 背景:这个问题源于Rspec测试,我使用类似 allow(x).to receive(:f) { |n| .... } 在许多情况下,要存根的块只接收标识,即 allow(x).to receive(:f) { |n| n } 我想知道,是否有一种更干

假设我有一个方法,它需要一个块。该块接收一个参数,例如:

f { |n| n*n } # square
如果我想用一个只返回未更改的参数的块调用函数,它将变为

f { |n| n }  # identity
有没有这样一个标识块的快捷方式

背景:这个问题源于Rspec测试,我使用类似

allow(x).to receive(:f) { |n| .... }
在许多情况下,要存根的块只接收标识,即

allow(x).to receive(:f) { |n| n }
我想知道,是否有一种更干净、更简洁的方式来写这篇文章。

是的。试试这个

f(&:itself)
对。试试这个

f(&:itself)

这是最好的,但我不知道我是否会称之为捷径。也许速记更合适,因为它主要节省击键。应用于OP的RSpec示例,它允许x.to接收:f,&:本身–可能不太明显,a&block可以通过其他参数传递。这很好,但我不知道是否可以称之为快捷方式。也许速记更合适,因为它主要节省击键。应用于OP的RSpec示例,它允许x.接收:f,&:本身–可能不太明显,&块可以通过其他参数传递。