在Ruby中,为什么在使用“do”和“end”时,方法调用不能被视为单
发布时间:2020-12-16 22:20:10 所属栏目:百科 来源:网络整理
导读:以下问题与“ Ruby Print Inject Do Syntax”问题有关.我的问题是,我们可以坚持使用do和end,并使其与put或p一起工作吗? 这样做: a = [1,2,3,4]b = a.inject do |sum,x| sum + xendputs b # prints out 10 所以说,注意是Array对象的一个??实例方法,而这个实
以下问题与“
Ruby Print Inject Do Syntax”问题有关.我的问题是,我们可以坚持使用do和end,并使其与put或p一起工作吗?
这样做: a = [1,2,3,4] b = a.inject do |sum,x| sum + x end puts b # prints out 10 所以说,注意是Array对象的一个??实例方法,而这个实例方法接受一个代码块,然后返回一个数字.如果是这样,那么调用函数或方法并返回一个返回值是没有什么不同的: b = foo(3) puts b 要么 b = circle.getRadius() puts b 在上述两种情况下,我们可以直接说 puts foo(3) puts circle.getRadius() 所以没有办法通过使用以下两种方法直接使其工作: a = [1,4] puts a.inject do |sum,x| sum + x end 但它给了 ch01q2.rb:7:in `inject': no block given (LocalJumpError) from ch01q2.rb:4:in `each' from ch01q2.rb:4:in `inject' from ch01q2.rb:4 对方法调用using()进行分组不起作用: a = [1,4] puts (a.inject do |sum,x| sum + x end) 这给出: ch01q3.rb:4: syntax error,unexpected kDO_BLOCK,expecting ')' puts (a.inject do |sum,x| ^ ch01q3.rb:4: syntax error,unexpected '|',expecting '=' puts (a.inject do |sum,x| ^ ch01q3.rb:6: syntax error,unexpected kEND,expecting $end end) ^ 最后,以下版本的作品: a = [1,4] puts a.inject { |sum,x| sum + x } 但是为什么方法调用using()的分组在前面的例子中有效?如果一个程序员坚持他使用和结束,该怎么办? 解决方法
从(非官方)
ruby grammar,我们看到put(…)中的(…)的内容必须是CALL_ARGS,它不直接减少到STMT.但是,它们可以减少到'(‘COMPSTMT’)’.通过添加一组额外的括号,可以使用do … end.
a = [1,4] puts ((a.inject do |sum,x| sum + x end)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |