gpt4 book ai didi

Ruby:不允许在 'yield' 之后放置空格

转载 作者:数据小太阳 更新时间:2023-10-29 07:30:12 24 4
gpt4 key购买 nike

如果我传递的参数在括号中,是否有某些原因导致 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', 'bar')
end

foo {|x, y| print x, y }

因为用于调用方法的括号是可选的,并且应该紧跟在名称之后(在这种情况下是 yield 关键字),这里调用 block 时只有一个参数:表达式 ('foo', 'bar').

但是,此表达式中的逗号是意外的,您会得到 SyntaxError 异常。您可以通过尝试计算 irb 中的表达式 ('foo', 'bar') 来更简单地复制相同的错误。

这是合法的:

def foo
yield ('foobar')
end

foo {|x| puts x }

因为表达式 ('foobar') 的结果是 'foobar',所以正确打印了 'foobar',这是传递给 block 的参数。

同样,这会按预期打印 4 和 8:

def foo
yield (2+2), (4+4)
end

foo {|x, y| puts x; puts y }

关于Ruby:不允许在 'yield' 之后放置空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23139556/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com