gpt4 book ai didi

ruby - 局部变量以下划线开头是好习惯吗?

转载 作者:数据小太阳 更新时间:2023-10-29 06:49:25 24 4
gpt4 key购买 nike

我刚接触 Ruby,来自 Java 和 C/C++ 环境。

在用 Ruby 编写第一个小项目时,我不知何故习惯了让所有局部变量都以下划线开头。我想我这样做的主要动机是更好的可读性和与方法调用的区别。

由于原则上只有三种类型的变量($global@instancelocal),绝大多数变量开始带下划线。我不太确定,这是好事还是坏事。此外,在许多其他语言中,下划线会被替换为其他字符。

除了通常的CamelCase 和/或下划线分隔 之外,是否有关于变量命名的最佳实践?专业“rubyists”的习惯是什么?当我选择前导下划线时,我是否忽略了一些通用的 Ruby 约定?


编辑
感谢所有答案和建议。这对我帮助很大。


下面是答案和评论的简短摘要
(对于时间短的访问者)

前导下划线与:

  • 方法参数:def my_method(_my_arg)
  • block 参数:例如my_array.each { |_x|放 _x}

所有其他没有前导下划线的局部变量,因为程序员来自例如JavaScript might get confused关于变量的预期行为。

对于变量名和方法调用之间的视觉分离,强制自己使用“(”括号“)”和所有方法调用可能显着提高可读性。

最佳答案

这个问题的现有答案现在已有几年历史,惯例也发生了变化。您应该只使用前导下划线 (_some_param) 或独立下划线 (_),以表明您不关心该值。 rubocop如果您分配了一个变量但不使用它,style 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 助手有副作用并返回一些东西,但我们不关心它。您也可以完全跳过赋值,但是单独一行看到一个空的 user 看起来很奇怪,并且没有清楚地揭示意图:

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

关于ruby - 局部变量以下划线开头是好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8977018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com