如何在ruby中的块中返回true / false

时间:2013-10-31 07:50:54

标签: ruby

我正在做这样的事情:

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时更像是程序性的案例陈述的例子。

2 个答案:

答案 0 :(得分:4)

只需删除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

答案 1 :(得分: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")}