如何使用Ruby的Symbol#to_proc访问数组中的数组?

Vij*_*Dev 2 ruby

你如何使用Symbol#to_proc语法编写以下内容?

[[a,1],[b,2],[c,3]].map { |r| r[0] }
Run Code Online (Sandbox Code Playgroud)

这给出了参数数量错误的错误.但我不知道在哪里给索引参数.

[[a,1],[b,2],[c,3]].map &:[]  # Where to put the index 0 ?
Run Code Online (Sandbox Code Playgroud)

我更喜欢第一种形式,我只是想知道如何使用它&:.

Mla*_*vić 6

你不能.您只能传递没有参数的方法.在您的情况下,您需要0作为参数提供,您只能使用块语法.

另一方面,您可以实现相同的使用first方法:

[[a,1],[b,2],[c,3]].map(&:first)
Run Code Online (Sandbox Code Playgroud)

编辑:

Joerg和tokland的答案都激励我进行一些实验.你实际上可以这样做:

arr = [[:a, 1], [:b, 2], [:c, 3]]
arr.each_with_object(0).map(&:[])
#=> [:a, :b, :c]
arr.each_with_object(1).map(&:[])
#=> [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)