在以下多重赋值示例中,变量will_not_be_used
不会在其他任何位置引用。但是,我个人认为这种方法简单易懂。
这被认为是一种不好的做法吗?
useful,will_not_be_used = my_hash.detect { |key,value| value == "foo" }
答案 0 :(得分:8)
使用下划线(_
)来表示这样的一次性值是不恰当的:
useful, _ = my_hash.detect { |key,value| value == "foo" }
更新正如JörgWMittag在下面的评论中所指出的,Ruby本身将_
理解为一个一次性变量:当启用警告运行时,Ruby(至少MRI,可能是其他人)会警告未使用的局部变量,除非它们以下划线开头。
答案 1 :(得分: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可能会推动使用丢弃的分配,但肯定还有其他一些使用案例值得考虑。但是,对于您的具体示例,它可能没有任何区别。