加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读