我刚刚接触 Ruby,并且来自 Java 和 C/C++ 环境。
在用 Ruby 编写第一个小项目时,我不知何故习惯了让所有局部变量都以下划线开头。我想我这样做的主要动机是更好的可读性以及与方法调用的区别。
原则上只有三种类型的变量($global
, @instance
and local
),绝大多数变量以下划线开头。我不太确定这是好是坏。此外,在许多其他语言中,下划线会被替换为其他字符。
有没有某种最佳实践关于通常的变量命名骆驼香烟盒 and/or 下划线分隔?专业“红宝石专家”有哪些习惯?当我选择前导下划线时,我是否忽略了一些通用的 Ruby 约定?
edit
感谢所有的答案和建议。这对我帮助很大。
下面是答案和评论的简短摘要
(针对时间短的访客)
前导下划线与:
- 方法参数:
def my_method(_my_arg)
- 块参数:例如
my_array.each { |_x| puts _x}
所有其他局部变量都没有前导下划线,因为程序员来自例如JavaScript 可能会感到困惑 https://stackoverflow.com/a/8977083/588243关于变量的预期行为。
为了变量名和方法调用之间的视觉分离,强迫自己使用“(
“括号”)
" with all方法调用可能会显着提高可读性。
这个问题的现有答案已经有几年了,而且惯例也发生了变化。您应该只使用前导下划线 (_some_param
),或独立的下划线 (_
),表明您不关心该值。这rubocop https://github.com/bbatsov/rubocop如果您分配一个变量但不使用它,样式 linting 工具会抱怨“无用的分配”,但它会忽略带有前导下划线的变量。这可以让您明确表示您不关心该值并且不打算使用它。
下面是 RSpec 上下文中的一个有点人为的示例用例:
describe 'login' do
let(:user) { FactoryGirl.create(:user, login: 'bob') }
it 'must be unique' do
_user1 = user
user2 = User.new login: 'bob'
expect(user2.valid?).to be_false
end
end
在这里我们表明我们的user
helper 有副作用并返回一些东西,但我们不关心它。您也可以完全跳过该作业,但看到一个裸露的user
on a line 本身看起来很奇怪,并且没有清楚地揭示其意图:
describe 'login' do
let(:user) { FactoryGirl.create(:user, login: 'bob') }
it 'must be unique' do
user
user2 = User.new login: 'bob'
expect(user2.valid?).to be_false
end
end
其他场景包括忽略迭代器中的值,或者重写您想要保留原始方法签名但不关心某些值的方法:
def greet(name, _title)
puts "Hi, #{name}!"
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)