加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 符号链接和to_proc

发布时间:2020-12-16 21:34:16 所属栏目:百科 来源:网络整理
导读:这是众所周知的 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(:upcas
这是众所周知的 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的特定情况下,这一点都没有意义,但是当块变大时,这些方法非常有用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读