2

在下面的多重赋值示例中,will_not_be_used不会在其他任何地方引用该变量。但是,我个人认为这种方法简单易懂。

这被认为是一种不好的做法吗?

useful,will_not_be_used = my_hash.detect { |key,value| value == "foo" }
4

2 回答 2

8

使用下划线 ( _) 表示一次性值是惯用的:

useful, _ = my_hash.detect { |key,value| value == "foo" }

更新:正如 Jörg W Mittag 在下面的评论中所指出的,Ruby 本身理解_为一个一次性变量:当在启用警告的情况下运行时,Ruby(至少 MRI,可能还有其他)将警告未使用的局部变量,除非它们以下划线开头.

于 2013-07-03T23:00:32.643 回答
1

一次性价值

使用多重赋值来丢弃丢弃的值并没有本质上的错误,但它可能不像其他构造那样具有意图揭示。根据您的数据或其预期用途,以下其中一项可能更冗长但语义更清晰:

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

Enumerable#detect的使用可能会推动丢弃分配的使用,但肯定还有其他用例值得考虑。但是,对于您的具体示例,它可能没有区别。

于 2013-07-03T23:17:35.617 回答