gpt4 book ai didi

ruby - 在符号上链接 & to_proc

转载 作者:数据小太阳 更新时间:2023-10-29 07:02:10 28 4
gpt4 key购买 nike

Rubyist 众所周知,& 会在符号上调用 to_proc,所以

[:a, :b, :c].map(&:to_s)

相当于

[:a, :b, :c].map { |e| e.to_s } # => ["a", "b", "c"]

假设我想在 to_s 之后立即调用另一个方法,这两个实现将起作用:

[:a, :b, :c].map { |e| e.to_s.upcase }
[:a, :b, :c].map(&:to_s).map(&:upcase)

我的问题是,有没有一种方法可以将 & Symbol#to_proc 调用链接到一个参数中?像这样的东西:

[:a, :b, :c].map(&:to_s:upcase)

谢谢!

最佳答案

如果你只是在做:

%i[a b c].map { |e| e.to_s.upcase }

然后就使用积木并继续处理更重要的事情。如果您确实在执行一系列 Enumerable 调用并发现这些 block 在视觉上过于嘈杂:

%i[a b c].map { |e| e.to_s.upcase }.some_chain_of_enumerable_calls...

然后您可以将您的逻辑放入 lambda 以帮助清理外观:

to_s_upcase = lambda { |e| e.to_s.upcase }
%i[a b c].map(&to_s_upcase).some_chain_of_enumerable_calls...

或者把它扔到一个方法中然后说:

%i[a b c].map(&method(:to_s_upcase)).some_chain_of_enumerable_calls...

无论哪种方式,您都为您的小逻辑命名(这几乎是所有 &:symbol 为您所做的)以使代码更易读和更容易理解。在 to_s.upcase 的特定情况下,这一切都没有意义,但当 block 变大时,这些方法非常有用。

关于ruby - 在符号上链接 & to_proc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34579603/

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