在下面的多重赋值示例中,will_not_be_used
不会在其他任何地方引用该变量。但是,我个人认为这种方法简单易懂。
这被认为是一种不好的做法吗?
useful,will_not_be_used = my_hash.detect { |key,value| value == "foo" }
在下面的多重赋值示例中,will_not_be_used
不会在其他任何地方引用该变量。但是,我个人认为这种方法简单易懂。
这被认为是一种不好的做法吗?
useful,will_not_be_used = my_hash.detect { |key,value| value == "foo" }
使用下划线 ( _
) 表示一次性值是惯用的:
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
Enumerable#detect的使用可能会推动丢弃分配的使用,但肯定还有其他用例值得考虑。但是,对于您的具体示例,它可能没有区别。