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 回答