这个问题在两个层面上有三个答案。
第一个答案是在 Ruby 语言层面:Ruby 中没有使用下划线。它没有任何意义。它只是一个合法标识符,就像任何其他合法标识符一样。它本来可以被命名为foo
or bar
相反,它不会以任何方式改变这段代码的含义。
第二个答案是在 Ruby 社区层面:在 Ruby 社区中,下划线用于与其他阅读代码的程序员进行交流“我需要在这里放置一个标识符,因为 Ruby 语言的规则强迫我这样做,但我我实际上对它不感兴趣,事实上我永远不会使用它。”所以,它对 Ruby 来说没有任何意义,但它does对 Ruby 有意义程序员。就像以结尾的方法一样!
or ?
:它们没有特殊含义,它们只是用于从一个 Ruby 程序员向另一个程序员传达意图。
第三个答案同样是在 Ruby 语言层面:由于 #2,Ruby 1.9+ 中进行了两项更改,将下划线的使用编码为“忽略我”标识符:
- 通常,未使用的局部变量会生成警告。未使用的以下划线开头的局部变量,或者只是简单命名
_
不生成警告。
- 通常,标识符在参数列表中只能使用一次。以下划线开头或简单命名的标识符
_
可以多次使用。
See:
#!/usr/bin/ruby -w
foo = nil
bar = nil
baz = nil
Running:
./test.rb
./test.rb:3: warning: assigned but unused variable - foo
./test.rb:4: warning: assigned but unused variable - bar
./test.rb:5: warning: assigned but unused variable - baz
But:
#!/usr/bin/ruby -w
_foo = nil
_bar = nil
_ = nil
Running:
./test.rb
And:
#!/usr/bin/ruby -w
def foo(bar, bar) end
Running:
./test.rb
./test.rb:3: duplicated argument name
def foo(bar, bar); end
[第二bar
在控制台中带有下划线,这里很难重现。]
But:
#!/usr/bin/ruby -w
def foo(_bar, _bar) end
Running:
./test.rb
因此,有下划线和无下划线之间的唯一区别是,下划线会关闭某些错误和警告,这与 Ruby 社区中的常见用法一致。
该约定通常也受到 linter、静态分析器、编辑器和提供 Ruby 代码语义分析的 IDE 的遵守,例如对于名称以 或 开头的变量,IDE 不会突出显示并警告未使用的变量。_
.