ruby – 我可以在单独的行上的对象和方法调用之间进行注释吗?
发布时间:2020-12-17 03:57:06 所属栏目:百科 来源:网络整理
导读:我有一个函数,我在新行上调用一个对象方法: 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
我有一个函数,我在新行上调用一个对象方法:
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 我也发现这更容易阅读,因为行尾的句号告诉我表达式还没有完成.此外,我把所有其他二元运算符放在行的末尾而不是在下一行的开头(出于同样的原因);为什么要例外? (我知道它不是一个运算符,但它是两个标识符之间的标点符号,因此就格式化而言它也可能是一个标点符号.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |