在Ruby中调用多个对象的方法有什么酷炫的方法吗?

7
很久以前我在 Ruby 中看到了这个技巧。与其像这样做(例如):
if array1.empty? and array2.empty? and array3.empty?

您可以一次性调用所有对象,并在末尾添加操作,有点像:
if %w(array1 array2 array3).each { |a| a.empty? }

但我认为它比那更简单...或者,可能是那样。我真的不知道,但这就是我对它感兴趣的原因。谢谢。


%w() 将由空格分隔的内容创建为数组。这里可以使用一个简单的[]数组。否则,我认为我和J Cooper在all?方面是一致的。更好的是,检查上面提到的让我想起了我已经忘记的%W()数组。 - Mike Woodhouse
4个回答

14

if [array1, array2, array3].all? { |a| a.empty? }

我认为这就是你要找的东西。


8
如果你正在使用Rails或Ruby 1.9,你可以使用Symbol#to_proc功能:
[array1, array2, array3].all?(&:empty?)

2

J Cooper说得没错,但我想补充一点:

%w(array1 array2 array3) # => ["array1", "array2", "array3"]

%w接受一个字符串并在空格处将其拆分,返回一个字符串数组


1

另外需要注意的是,Symbol#to_proc 可能会导致性能问题,因此在可读性值得的情况下使用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接