3

私はこのようなことをしています:

myarray.delete_if{ |x|
   #some code
   case x
   when "something"
       return true
   when "something else"
       return false
   end

「return」ステートメントは間違っているようで、正しい構文がわかりmyarray.delete_if{ |x| x == y }ません。単純な形式の : を理解していますが、 true/false を返したいという欲求が case ステートメントの例のようにより手続き的である場合は理解できません。

4

2 に答える 2

5

削除するだけreturnです。Ruby では、最後に評価された値が戻り値として使用されます。

myarray = ["something", "something else", "something"]
myarray.delete_if { |x|
  #some code
  case x
  when "something"
    true
  when "something else"
    false
  end
}
myarray # => ["something else"]

next明示的にしたい場合に使用できます。

于 2013-10-31T07:53:08.483 に答える
1

falseケースを特に調整する必要はありません。それらをnil条件付けしない場合、デフォルトである可能性があります。

myarray.delete_if do |x|
  ...
  case x
  when "something" then true
  end
end

またはさらに良い:

myarray.delete_if do |x|
  ...
  "something" === x
end

パーツに何があるのか​​ わかりませんが...、配列から特定の要素を削除したいだけの場合は、次のことができます。

myarray.delete("something")

レシーバーを取り戻したい場合は、次のようにします。

myarray.tap{|a| a.delete("something")}
于 2013-10-31T08:14:39.567 に答える