Ruby:不允许在’yield’之后放入空格
发布时间:2020-12-17 02:40:35 所属栏目:百科 来源:网络整理
导读:如果我传递的参数在括号中,是否有一些理由在yield关键字后不允许空格?这段代码会收集一个错误: def who_says_whatyield ("rose","yay")endwho_says_what {|flower,speech| puts "#{flower} says #{speech}"} 虽然这段代码可以在yield之后拥有尽可能多的空
如果我传递的参数在括号中,是否有一些理由在yield关键字后不允许空格?这段代码会收集一个错误:
def who_says_what yield ("rose","yay") end who_says_what {|flower,speech| puts "#{flower} says #{speech}"} 虽然这段代码可以在yield之后拥有尽可能多的空格,但我想: def who_says_what yield "rose","yay" end who_says_what {|flower,speech| puts "#{flower} says #{speech}"} 解决方法
yield关键字的行为与方法调用语法没有区别.如果方法名称和包含方法参数的括号之间有空格,则解释器会将括号解析为传递单个参数,该参数是括号内表达式的结果.
以此为例: def foo yield('foo','bar') end foo {|x,y| print x,y } 以上输出’foobar’如预期. def foo yield ('foo',y } 因为调用方法的括号是可选的并且预期会紧跟名称(或者在这种情况下为yield关键字),所以这里只使用一个参数调用块:表达式(‘foo’,’bar’). 但是,此表达式中的逗号是意外的,您将获得SyntaxError异常.您可以通过尝试计算irb中的表达式(‘foo’,’bar’)来更简单地复制相同的错误. 这是合法的: def foo yield ('foobar') end foo {|x| puts x } 这正确地打印’foobar’,因为表达式(‘foobar’)的结果是’foobar’,这是传递给块的参数. 同样,这打印4和8正如人们所期望的那样: def foo yield (2+2),(4+4) end foo {|x,y| puts x; puts y } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |