Rubyでは、このようにキー名でいくつかのハッシュ値を選択しています
new_values = my_hash.values_at(:value2, :value3, :value6, :value8).select {|a| !a.empty?}
そしてこれはどうですか?動いていない。
new_values = my_hash.values_at(:value2, :value3, :value6, :value8).select(&:!empty?)
Rubyでは、このようにキー名でいくつかのハッシュ値を選択しています
new_values = my_hash.values_at(:value2, :value3, :value6, :value8).select {|a| !a.empty?}
そしてこれはどうですか?動いていない。
new_values = my_hash.values_at(:value2, :value3, :value6, :value8).select(&:!empty?)
Sergioが説明したように、使用している式は解析されないため、標準のRubyでこれを行う方法はありません。何かを一緒にハックして、それが機能するようにすることができます(もちろんreject
、ここに行く方法です):
['1', '', '11', ''].select(&fn(:empty?, :!))
#=> ["1", "11"]
これが私の拡張ライブラリfn
で使用されているasの実装です:
def fn(*funs)
-> x do
funs.inject(x) do |v,f|
Proc === f ? f.call(v) : v.send(f)
end
end
end
name のメソッドがないため、機能しません!empty?
。そして、この名前はルビーでは違法です。(最初のスニペットのように)完全なラムダ形式を使用するか、使用する必要がありますreject
['1', '', '11', ''].select(&:empty?) # => ["", ""]
['1', '', '11', ''].reject(&:empty?) # => ["1", "11"]
ここでの私の答えの精神で:
class Symbol
def on
->(*args) { yield(*args).send(self) }
end
end
['1', '', '11', ''].select(&:!.on(&:empty?))
# => ["1", "11"]
の逆メソッドはempty?
ですany?
。これで、使用することで目標を達成できます
new_values = my_hash.values_at(:value2, :value3, :value6, :value8).select(&:any?)