ruby – 符号链接和to_proc

前端之家收集整理的这篇文章主要介绍了ruby – 符号链接和to_proc前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是众所周知的 Rubyist&会在符号上调用to_proc,所以
[:a,:b,:c].map(&:to_s)

相当于

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

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

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

我的问题是,是否有办法将& amp;符号#to_proc调用一个参数?就像是:

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

谢谢!

解决方法

如果你只是这样做:
%i[a b c].map { |e| e.to_s.upcase }

然后只需使用块并继续处理更重要的事情.如果您真的在进行一系列Enumerable调用,并且发现块太吵了:

%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...

无论哪种方式,你都会给你的一些逻辑命名(这几乎都是&:符号为你做的),使代码更易读,更容易理解.在to_s.upcase的特定情况下,这一点都没有意义,但是当块变大时,这些方法非常有用.

猜你在找的Ruby相关文章