Ruby在[1,2,3]中相当于foo?

taw*_*taw 1 ruby

Python具有非常优雅的语法,可以针对多种模式检查值.

2 in [1,2,4] #=> True
6 in [1,2,4] #=> False
Run Code Online (Sandbox Code Playgroud)

Ruby版本的订单感觉不对:

[1,2,4].include?(2)
Run Code Online (Sandbox Code Playgroud)

我明白这include?比OO更有意义2.included_in?([1,2,4]),我仍然不喜欢它.Ruby甚至有in关键字,但它似乎只用于构造for i in [1,2,4],而不是用于成员资格测试.

另一种方式是这样的:

(case 2 when 1,2,4 then true end)
Run Code Online (Sandbox Code Playgroud)

相当冗长,但允许模式测试:

(case file_name when "README", /\.txt\z/ then true end)
Run Code Online (Sandbox Code Playgroud)

仍然不是很可读.

我偶然错过了一些非常漂亮的方式吗?

ngo*_*eff 7

正如@deceze所说,你可以实现自己的:

class Object
  def in(ar)
    ar.include? self
  end
end

irb(main):013:0> 's'.in ['a', 'b', 'c']
=> false
irb(main):014:0> 's'.in ['a', 'b', 'c', 's']
=> true
irb(main):015:0> 5.0.in [3.2, 5.0, 1.2]
=> true
irb(main):016:0> 4.0.in [3.2, 5.0, 1.2]
=> false
Run Code Online (Sandbox Code Playgroud)

  • 只是一个小建议:该方法应命名为`in?`,这是Ruby方法返回布尔值的约定. (3认同)