【问题标题】:Is it OK to use multi line regular expression to comment out code in Ruby?可以使用多行正则表达式注释掉Ruby中的代码吗?
【发布时间】:2020-03-22 08:01:39
【问题描述】:

在 ruby​​ 中注释掉代码时,我们有两个主要选项

  1. 在行首添加锐利 # puts "somecode"
  2. 把你的代码放在 =start puts "somecode" =end之间

我很懒,有时我把代码放在斜线之间,如下面的代码。它创建了一个多行正则表达式。这种做法会导致什么样的副作用?

代码

puts "hello"
/
puts "world"
/
puts "peace"

输出

hello
peace

【问题讨论】:

  • 是的,只是不要这样做/puts "#{stop_the_cooling_system_on_the_nuclear_plant}"/
  • 即这种类型的注释对于任何关键的东西都是不安全的,因为它仍然可以在 Ruby 正则表达式中执行代码。
  • 更好地了解您的编辑器。关于所有这些都允许块评论,您只需突出显示要评论/取消评论的行并按下快捷方式,例如CMD + / 在 Atom 中。
  • 我同意大家的看法:让编辑帮忙。但是,如果您对非注释块注释死心塌地,请使用if false ... end,它不会产生任何副作用(并包含注释,因此没有人试图阅读代码认为您疯了,只是奇怪。)

标签: regex ruby comments


【解决方案1】:

以 Tadman 为例

def example
  do_important_stuff!
  /
  other(thing: true)
  do_super_important_stuff(factor: 9000)
  /
  do_other_stuff
end

这会在每次调用该方法时创建一个 Regex 对象,这不是免费的。垃圾收集过程需要时间、内存和额外的工作。

【讨论】:

    【解决方案2】:

    正如 Holger 所指出的,大多数编辑器都有“切换 cmets”,这使得启用/禁用代码块的方式更加可靠。这是推荐的方法。您的正则表达式方法太懒惰了一半,任何阅读代码以验证发生了什么的人都会感到困惑。

    使用无意中禁用的代码进行提交是会发生的事情,因此您希望您的 cmets 既明显又易于修复。

    哪个更好看:

    def example
      do_important_stuff!
      /
      other(thing: true)
      do_super_important_stuff(factor: 9000)
      /
      do_other_stuff
    end
    

    相对于更直观的:

    def example
      do_important_stuff!
      # other(thing: true)
      # do_super_important_stuff(factor: 9000)
      do_other_stuff
    end
    

    与许多编辑器一样,Stack Overflow 的语法突出显示会立即显示此处的代码已被注释掉。另一个版本只是看起来奇怪

    如果您觉得启用/禁用评论太乏味,您可能需要让您的编辑器帮助您,或对其进行配置以使其更容易做到这一点。

    【讨论】:

      猜你喜欢
      • 2020-02-02
      • 2011-04-24
      • 1970-01-01
      • 2015-02-16
      • 1970-01-01
      • 2016-07-20
      • 2019-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多