gpt4 book ai didi

ruby - 为什么 Ruby 中的 `next` 方法会引发 SyntaxError 而 `next!` 或 `self.next` 不会在猴子修补 String 类时引发语法错误?

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

下面的代码工作正常:

class String
def foo
next!
end
end

puts 'hh'.foo # hi

这个也很好用:

class String
def foo
self.next
end
end

puts 'hh'.foo # hi

但这个不是:

class String
def bar
next
end
end

# Invalid next (SyntaxError)

为什么 Ruby 在此处使用 next 关键字并引发 SyntaxError,即使我正在处理 String 类?

最佳答案

对于前两个示例,Ruby 解析器确定您正在调用方法,因为不能那样使用 next 关键字。

对于第三个示例,看起来您正在使用 the next keyword而不是调用方法。解析器在此阶段无法知道您实际上是要调用 next 方法(可能存在也可能不存在)。

因此,您必须引导解析器避免这些歧义。您可以像在第二个示例中那样使用显式接收器,也可以使用 send(:next) 等结构来代替

关于ruby - 为什么 Ruby 中的 `next` 方法会引发 SyntaxError 而 `next!` 或 `self.next` 不会在猴子修补 String 类时引发语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54308569/

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