gpt4 book ai didi

ruby - 在 ruby​​ 中为多个字段做 & 符号不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 17:20:15 25 4
gpt4 key购买 nike

在 ruby 中,我可以做到

['Hi', 'Yo'].map(&:upcase)

但是如果我想同时获得 :upcase:downcase 怎么办?

都不是

['Hi', 'Yo'].map(&[:upcase,:downcase])

也不

['Hi', 'Yo'].map([&:upcase,&:downcase])

成功了。 :(

最佳答案

这里有什么:

['Hi', 'Yo'].map(&:upcase)

实际上是一个简短的版本:

['Hi', 'Yo'].map(&:upcase.to_proc)

它是以下的变体:

['Hi', 'Yo'].map(&->(s) { s.send(:upcase) })

或者换句话说:

['Hi', 'Yo'].map { |s| s.upcase }

&:x 符号实际上是这种情况的一种特殊情况的简写,并且只适用于单个符号。你可以做的是定义一个大致如下的 to_proc 方法:

class Array
def to_proc
->(i) { inject(i) { |v, m| v.send(m) } }
end
end

该方法必须返回一个 Proc 对象,一个“lambda”,它是在此处使用 Ruby -> (...) { ... } 定义的> 符号。

然后你可以这样调用它:

['Hi', 'Yo'].map(&[:upcase, :downcase, :to_sym].to_proc)
# => [:hi, :yo]

关于ruby - 在 ruby​​ 中为多个字段做 & 符号不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50301089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com