简单的Ruby'或'问题

ssc*_*rus 1 ruby conditional ruby-on-rails

在控制台中:

@user.user_type = "hello"
@user.user_type == "hello"
  true
@user.user_type == ("hello" || "goodbye")
  false
Run Code Online (Sandbox Code Playgroud)

如何编写最后一个语句,以便检查是否@user.user_type包含在两个字符串之一中?

Reu*_*aby 8

["hello", "goodbye"].include? @user.user_type
Run Code Online (Sandbox Code Playgroud)

  • 实际上,它是"包括?".但@sscirrus,你应该查看文档:http://ruby-doc.org/core/classes/Enumerable.html (4认同)

tok*_*and 7

Enumerable#include? 是一种惯用的简单方法,但作为旁注,让我向您展示一个非常简单的扩展(我想)会取悦Python粉丝:

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

2.in? [1, 2, 3]  # true
"bye".in? ["hello", "world"] # false   
Run Code Online (Sandbox Code Playgroud)

有时候(实际上大部分时间),在语义上更方便地询问对象是否在集合内部而不是相反.现在你的代码看起来像:

@user.user_type.in? ["hello", "goodbye"]
Run Code Online (Sandbox Code Playgroud)

顺便说一下,我想你想写的是:

@user.user_type == "hello" || @user.user_type == "goodbye"
Run Code Online (Sandbox Code Playgroud)

但是我们程序员本质上是懒惰所以更好地使用Enumerable#include?和朋友.