【问题标题】:What does it mean when a variable or method or constants has preceded with an underscore in Ruby?在 Ruby 中,当变量、方法或常量前面带有下划线时,这意味着什么?
【发布时间】:2014-10-24 00:51:27
【问题描述】:

当你在 Rails 中看到方法或变量前面带有下划线时,在 Ruby 中是什么意思

submit_tag _('Enroll')
:notice => _('Update card.')

_session_id

这些只是约定,还是暗示变量/方法的行为存在功能差异?

【问题讨论】:

    标签: ruby-on-rails ruby syntax naming-conventions


    【解决方案1】:

    在行为上没有区别。这只是转换。

    但是让我们仔细看看:

    _('A string') 实际上是一个方法而不是一个变量。下划线方法由 Gettext 定义并翻译一个字符串。

    @_foo 常用于向其他开发人员表明该变量有一些特殊之处,因此不应使用它。对于用于缓存值的变量,我经常看到这种模式,例如:

    def expensive_operation
      @_expensive_operation ||= begin
        # long running code...
      end
    end
    

    而下划线有时用于表示块中没有使用变量。像这样:

    a_hash.each do |_, value|
      # do something with the value,  not with the key
    end
    

    【讨论】:

    • ...最后一个也可能是|_not_using_the_key_here, value|,虽然我不记得在 SO... 看到过那种形式...
    【解决方案2】:

    这两种情况完全不同。

    第二个看起来像是一个局部变量(虽然它可能是一个方法调用,但没有上下文是无法分辨的)。以下划线开头的局部变量在未使用时不会生成“未使用变量”警告,这就是为什么它们用于指示有意未使用的变量(与错字或编程错误)。

    第一个是对名为_ 的方法的调用。这个方法的作用,取决于那个时候self的类,你必须查看那个类的文档。

    在 IRb 中,_ 是一种返回最后一个被计算的表达式的结果的方法。

    【讨论】:

      猜你喜欢
      • 2019-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多