Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 当只使用一个变量时,使用多个赋值是否是一种不好的做法?_Ruby - Fatal编程技术网

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]