为什么这个ruby方法调用中的空间有意义?
我正在Rails应用程序中编写jsonify视图.我有:
json.samba_secrets_present(not @idp_ad_info.samba_secrets.nil?) 这会产生语法错误: app/views/idp_ad_infos/show.jsonify:7: syntax error,unexpected tIVAR,expecting '(' 然而, json.samba_secrets_present (not @idp_ad_info.samba_secrets.nil?) 工作良好.我原以为第一个是对Jsonify :: Builder对象的samba_secrets_present方法的方法调用,第一个参数不是idp_ad_info.samba_secrets.nil?.为什么空间有意义? 解决方法puts(not true) #=> error puts (not true) #=> false,CASE 2 puts(not(true)) #=> false Ruby允许您省略用于调用方法的括号.通常,如果只有一个方法调用,则可以省略括号.但是,当方法调用位于另一个方法调用的参数位置时(通常情况下,请参见“更新”部分中的特殊情况),您不能省略它,因为这会引入歧义.请考虑以下示例: puts(not true,false) puts(some_method arg1,arg2) Ruby解析器无法确定false(或arg2)是内部方法的参数还是外部put,因此它会针对这些情况引发错误.解析器没有运行时上下文来确定内部方法的arity,因此它不关心它是否是一元方法(如不是). 以案例2为例,其解释为: puts( (not false)) 你可以写: puts (not false),true,(not true) 他们都是看跌期权的论据. Some Ref: Positional Arguments 更新: def a *args args end p(a 1,2,3,4) #=> [1,4] 但是,我会投票使用必要的括号编写更清晰的代码,以使代码更具可读性. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ruby-on-rails – Rails v2.3:会话和Cookie之间的区别
- ruby数组将第一个,第二个放入变量,其余放入另一个变量
- c# – 读取数百万条数据记录的最佳表现
- 依赖注入 – 如何在Ninject 2中使用Common Service Locator
- 如何将本地jpeg或png图像文件加载到iPhone应用程序?
- json根据父子id合并
- 把colors.xml文件里配置的颜色值转成string
- [Swift]LeetCode819. 最常见的单词 | Most Common Word
- C#多线程学习之(五)使用定时器进行多线程的自动管理
- c# – 具有不清楚返回类型和重载分辨率的Lambda转换