我习惯于能够缩短
some_array.map { |e| e.to_s }
Run Code Online (Sandbox Code Playgroud)
至
some_array.map(&:to_s)
Run Code Online (Sandbox Code Playgroud)
有没有办法缩短
some_array_of_arrays.map { |e| e[4] }
Run Code Online (Sandbox Code Playgroud)
相近
some_array_of_arrays.map(&:[4])
Run Code Online (Sandbox Code Playgroud)
显然我已经尝试过最后一个例子,但它不起作用.理想情况下,解决方案将推广到其他"奇怪格式化"的方法调用[].
我对任何Rails/ActiveSupport解决方案都不感兴趣.只有普通的Ruby,假设有某种解决方案.
你可以使用Proc:
> a = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14]]
> third_elem = Proc.new {|x| x[2]}
> a.map(&third_elem)
#> [3, 7, 11, nil]
Run Code Online (Sandbox Code Playgroud)
要么
> a.map &->(s) {s[2]}
#=> [3, 7, 11, nil]
Run Code Online (Sandbox Code Playgroud)