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的特定情况下,这一点都没有意义,但是当块变大时,这些方法非常有用.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...