Ruby 当只使用一个变量时,使用多个赋值是否是一种不好的做法?
在下面的多重赋值示例中,变量Ruby 当只使用一个变量时,使用多个赋值是否是一种不好的做法?,ruby,Ruby,在下面的多重赋值示例中,变量不会被使用不会被引用到其他任何地方。然而,我个人认为这种方法简单易懂 这被认为是一种不好的做法吗 useful,will_not_be_used = my_hash.detect { |key,value| value == "foo" } 对于这样的一次性值,使用下划线(\uu)是一种惯用用法: useful, _ = my_hash.detect { |key,value| value == "foo" } 更新:正如Jörg W Mittag在下面的评论中指
不会被使用
不会被引用到其他任何地方。然而,我个人认为这种方法简单易懂
这被认为是一种不好的做法吗
useful,will_not_be_used = my_hash.detect { |key,value| value == "foo" }
对于这样的一次性值,使用下划线(
\uu
)是一种惯用用法:
useful, _ = my_hash.detect { |key,value| value == "foo" }
更新:正如Jörg W Mittag在下面的评论中指出的那样,Ruby本身理解为一个一次性变量:在启用警告的情况下运行时,Ruby(至少是MRI,可能还有其他)将警告未使用的局部变量,除非它们以下划线开头。丢弃值
使用多重赋值来丢弃丢弃的值本身并没有什么错,但它可能不像其他构造那样能揭示意图。根据您的数据或其预期用途,以下选项之一可能更详细,但语义更清晰:
my_hash = {bar: "foo", baz: "quux"}
# => {:bar=>"foo", :baz=>"quux"}
my_hash.rassoc('foo').first
# => :bar
my_hash.select { |k,v| v == "foo" }.keys.first
# => :bar
my_hash.map { |key, value| key if value == "foo" }.first
# => :bar
的使用可能会推动被丢弃的赋值的使用,但肯定还有其他用例值得考虑。不过,对于您的特定示例来说,这可能没有什么区别。它不仅是惯用的,甚至还受到执行引擎的鼓励:未使用的局部变量会触发警告,除非它们以下划线开头。@JörgWMittag:它是“以
\u
开头”还是?@muistooshort至少在MRI 2.0.0p195中是这样的“以开头
据我所知,不仅仅是\uu
本身。请注意,\u
被IRB和PRY用来保存最后一个表达式的结果。如果你显式地给它赋值,需要记住一些事情。是的,他们在2.0中对它进行了更改,如果你在源代码中选中warn\u unused\u var
,你就会看到RSTRING\u PTR[0]=''
测试。1.9.3只需检查its中的。
。我不喜欢使用“\u0”。它太像Perl了,不能使用“神奇”变量。而且,我更喜欢先看或[0]
。