gpt4 book ai didi

ruby - 我可以在单独的行中对对象和方法调用进行注释吗?

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

我有一个函数,我在新的一行调用一个对象方法:

def fn(str)
str.gsub('a', 'a1')
.gsub('b', 'b2')
end

所有这一切都很好而且花花公子......直到我想在换行方法调用之前添加评论。

def fn(str)
# Replace 'a' with 'a1'
str.gsub('a', 'a1')
# Replace 'b' with 'b2'
.gsub('b', 'b2')
end

轰!错误。

SyntaxError: syntax error, unexpected '.', expecting keyword_end (SyntaxError)
.gsub('b', 'b2')
^

然而,如果我将注释放在同一行,错误就会消失...

def fn(str)
str.gsub('a', 'a1') # Replace 'a' with 'a1'
.gsub('b', 'b2') # Replace 'b' with 'b2'
end

这到底是怎么回事?我使用的是 Ruby 版本 ruby 2.0.0p648(2015-12-16 修订版 53162)[universal.x86_64-darwin15])

编辑

Ruby 解析器可能对在哪里考虑语句结束感到困惑。 str.gsub('a', 'a1') 本身可以是一个语句,也可以在下一行继续。

来自 Python 世界,解决这个问题的方法是用括号打开一个范围,让解析器知道:

def fn(str):
return (
# Replace 'a' with 'a1'
str.replace('a', 'a1')
# Replace 'b' with 'b2'
.replace('b', 'b2')
)

Python 对上述输入没有问题,但 Ruby 仍然会抛出相同的错误,即使括号清楚地界定了语句。

最佳答案

如果你把方法调用的句点放在第一行的末尾而不是下一行的开头,Ruby 知道你最终会调用一个方法,并且很乐意让你同时评论:

def fn(str)
# Replace 'a' with 'a1'
str.gsub('a', 'a1').
# Replace 'b' with 'b2'
gsub('b', 'b2')
end

我还发现这更容易阅读,因为行尾的句号告诉表达式还没有结束。此外,我将所有其他二元运算符放在行尾而不是下一行的开头(出于同样的原因);为什么要为 . 设置异常(exception)? (我知道它不是运算符,但它是两个标识符之间的标点符号,因此就格式而言,它也可能是一个。)

关于ruby - 我可以在单独的行中对对象和方法调用进行注释吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39282144/

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