这似乎是一个可笑的简单问题,但是在Ruby中重写这个最短/最常用的方式是什么?确定变量是否是值列表中的任何一个的最短/最常用的方式是什么?
if variable == :a or variable == :b or variable == :c or variable == :d # etc.
我看到这个解决方案:
if [:a, :b, :c, :d].include? variable
,但是这并不总是功能相当的 - 我相信Array#include?
实际上看起来,看看是否变量对象被包含在列表中;它没有考虑到对象可以用def ==(other)
执行它自己的平等测试。
正如下面有用的评论员所观察到的那样,这种解释是不正确的。 include?
确实使用==
,但它使用数组中项目的==
方法。在我的例子中,它是符号,而不是变量的==
方法。这就解释了为什么它不等同于我的第一个代码示例。
(举个例子来说,Rails的Mime::Type
实现:request.format == :html
可能返回true,但[:html].include?(request.format)
将返回false,因为request.format
是哑剧::类型,而不是一个符号实例。)
我有最好的到目前为止是:
if [:a, :b, :c, :d].select {|f| variable == f}.any?
但似乎有点麻烦我。有没有人有更好的建议?
我认为,“任何”语法看起来很干净。但是,我是C#,而且很像镜像LINQ的外观,所以我很偏向。 – 2009-09-28 13:40:10
文件说明:Array#include?如果给定对象存在于self中(即,如果有任何对象== anObject),则返回true,否则返回false。 – khelll 2009-09-28 13:58:52
我不知道在Object类中实现isOneOf?(array)方法在ruby中不被认为是一种好的做法,我的意思是,与基类混淆(显然,我没有使用ruby的经验)......无论如何,它会如果有人可以发布这样的方法,请罚款...... – opensas 2009-10-01 01:50:51