这是ActiveSupport扩展的一个方法。原代码如下:
class Symbol
def to_proc
Proc.new { |*args| args.shift.__send__(self, *args) }
end
end
它扩展出这种用法:
(1..5).map(&:to_s)
map原本是要接受一个block参数,普通的用法是:
(1..5).map{|e| e.to_s}
或者:
proc = Proc.new{|e| e.to_s}
(1..5).map(&proc)
上面这个(1..5).map(&:to_s)用法可以拆成3步来解释:
sym = :to_s
proc = Proc.new{|*args| args.shift.send(sym, *args)}
(1..5).map(&proc)
有个疑问,经过yanping.jia解释,map(&:to_s)因为出现了&符号,所以:to_s会执行to_proc方法,然后与&一起合成&proc交给map处理。虽然说得通,不过我总觉得这个解释中,&这个符号做了2次工作,是否合理?
这种用法原本是Ruby Extensions Project发明的,在RoR中作了点修改。原来的版本是:
class Symbol
def to_proc
proc { |obj, *args| obj.send(self, *args) }
end
end
它使用2个参数来分出一个参数,而RoR版本则使用shift分出来。
刚才又想了一下,yanping.jia的解释应该是合理的,解释器看到&:id时,先会判断是否是一个方法调用,如果是则需要把:id转成一个proc。否则就是语法错误了。
分享到:
相关推荐
BSODOnDeath-ROR2:一款下雨风险的mod 2,每当您死亡时,它都会蓝屏计算机
ROR环境 Ruby version 1.9.3 (java) RubyGems version 1.8.24 Rack version 1.4 Rails version 3.2.12 JavaScript Runtime therubyrhino (Rhino) Active Record version 3.2.12 Action Pack version 3.2.12 ...
单个组织记录由以下JSON结构表示: { "id":"https://ror.org/013cjyk83", "name":"PSL Research University", "email_address":null, "ip_addresses":[ ], "established":2010, "types":[ "Education" ], ...
自述文件 该自述文件通常会记录启动和运行应用程序所需的所有步骤。 您可能要讲的内容: Ruby版本 系统依赖 配置 数据库创建 数据库初始化 如何运行测试套件 服务(作业队列,缓存服务器,搜索引擎等) ...
RoR新闻室 Flatiron的RoR项目:CMS专注于授权角色以支持新的发布工作流程
ror实例ror实例ror实例
NULL 博文链接:https://xuxiangpan888.iteye.com/blog/266696
RoR性能优化经验谈,牛人对ror的优化,值得大家阅读
ror中文资料ror中文资料
ROR 架构介绍及了解
ROR_lesson:乌迪米
基于RoR的博客系统,代码风格简单清晰,前后太完善,适合初学者。
神经网络ror resenet模型 cifar10准确率89% cifar100准确率72%
之前本人在windows 上搭建ROR环境,屡屡受挫,上网查资料、加入ruby on rails的qq群,关注ruby社区等,没有得到一套完整的正确的方法,很多朋友说不要在windows 弄ROR,很费力。的确很费力,后来在朋友的帮助下,...
RoR选题方向—源代码
家蚕Ror2基因的克隆与表达分析,刘伟,陈菲,Ror家族属于受体酪氨酸激酶中的孤儿受体,在进化上非常保守。本研究克隆了家蚕Ror2基因BmRor2的ORF序列,BmRor2基因的ORF为1924 bp,编码638
破解版本的JAR包,放到本地磁盘,ECLIPUS直接用,到JVM设置直接加 -noverify -javaagent:D:\javarebel.jar
多人RoR2游戏应该快节奏而有趣。 但是,通常情况下,玩家会遇到战利品被盗或一名玩家主导游戏的问题。 显然,解决此问题的最佳方法是首先消除ho积的动机! ShareSuite是一款具有多种系统的mod,旨在共享您在整个...
RoR2Modifact A Rain of Rain 2 mod专注于提供挂钩来改变各种工件
mysqlDriver4ror.rarmysqlDriver4ror.rarmysqlDriver4ror.rarmysqlDriver4ror.rar