更简洁的ruby块语法,例如:`[1,2] .each {puts _}`而不是`[1,2] .each {| i |放弃我

时间:2016-10-27 11:46:18

标签: ruby

所以,是的,有没有办法像

那样
[1, 2].each { puts _ }

而不是

[1, 2].each  { |i| puts i }

也许:

{ a: 1, b: 2 }.each { puts _1, _2 }

显然这些都是简单的例子,但用这些编写脚本要容易得多。

对于像def _1; ...; end这样的人来说,现在可能更容易扩展,但我没有办法让当前对象传递给该块。

2 个答案:

答案 0 :(得分:4)

这是我唯一能找到的东西

puts_m = method(:puts)
[1, 2, 3].each(&puts_m)
1
2
3
=> [1, 2, 3] 

答案 1 :(得分:0)

除了Ursus回答!

对于这种情况,你可以:

puts [1, 2].join "\n"

你也可以玩monkeypatching:

class Array
  def putseach
    each { |i| puts i }
  end
end

并用

调用它
[1, 2].putseach

可能不建议在更大的代码库中使用,但在某些情况下,这是一种有趣的方法来获得更清晰的代码。