你能用Ruby的块速记来调用类似数组访问器的方法吗?

tay*_*low 0 ruby

我习惯于能够缩短

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,假设有某种解决方案.

Gag*_*ami 5

你可以使用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)