调用所有数组元素的函数,而不传递item作为参数

时间:2014-12-06 02:03:38

标签: javascript ruby

在javascript中,我可以这样做:

var show = function(w) {
  alert(w);
};

var words =  ['a', 'b', 'c'];
words.forEach(show);

请注意,我不需要将数组项作为参数传递。

红宝石有同样的方法吗?

像:

def show(w)
  puts w
end

words = ['a', 'b', 'c']
words.each(show)

PS: 我知道我可以这样做:words.each { |w| show(w) }。问题是我是否可以像在javascript中那样做,而不将项目作为参数传递。

1 个答案:

答案 0 :(得分:4)

当然,你通过传递方法来实现,就像你在ECMAScript中那样:

words.each(&method(:show))

请注意,这是使Ruby示例工作的方法。但是,Ruby方法实际上并不是Ruby中最接近ECMAScript函数的模拟方法。 Proc实际上是更接近的匹配:

show = -> w { puts w }

words.each(&show)

这实际上非常接近ECMAScript 6版本:

const show = w => alert(w);

words.forEach(show);