lak*_*are 4 ruby yield parentheses
如果我传递的参数在括号中,是否有一些理由在yield关键字后不允许空格?这段代码会收集一个错误:
def who_says_what
yield ("rose","yay")
end
who_says_what {|flower,speech| puts "#{flower} says #{speech}"}
Run Code Online (Sandbox Code Playgroud)
虽然这段代码可以在yield之后拥有尽可能多的空格,但我想:
def who_says_what
yield "rose","yay"
end
who_says_what {|flower,speech| puts "#{flower} says #{speech}"}
Run Code Online (Sandbox Code Playgroud)
该yield关键字的行为与方法调用语法没有区别.如果方法名称和包含方法参数的括号之间有空格,则解释器会将括号解析为传递单个参数,该参数是括号内表达式的结果.
以此为例:
def foo
yield('foo', 'bar')
end
foo {|x, y| print x, y }
Run Code Online (Sandbox Code Playgroud)
以上输出'foobar'如预期.
def foo
yield ('foo', 'bar')
end
foo {|x, y| print x, y }
Run Code Online (Sandbox Code Playgroud)
因为调用方法的括号是可选的,并且预期会紧跟名称(或yield本例中的关键字),所以这里只使用一个参数调用块:表达式('foo', 'bar').
但是,此表达式中的逗号是意外的,您将获得SyntaxError异常.您可以通过尝试计算表达式更简单地重复同样的错误('foo', 'bar')在irb.
这是合法的:
def foo
yield ('foobar')
end
foo {|x| puts x }
Run Code Online (Sandbox Code Playgroud)
这正确地打印'foobar',因为表达式的结果('foobar')是'foobar',并且这是传递给块的参数.
同样,这打印4和8正如人们所期望的那样:
def foo
yield (2+2), (4+4)
end
foo {|x, y| puts x; puts y }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |