开始Ruby问题:
我正在尝试查看字符串变量的内容是"个人""电子邮件"还是"密码".
我尝试着:
if params[:action] == "password" || "email" || "personal"
foo
else
don't foo
end
Run Code Online (Sandbox Code Playgroud)
但这不起作用并返回奇怪的结果,并使用IRB来玩"或"语句我不知道为什么会发生以下情况:
irb(main):040:0> a = "email"
=> "email"
irb(main):041:0> a == "password" || "email"
=> "email"
irb(main):042:0> a == "email" || "password"
=> true
Run Code Online (Sandbox Code Playgroud)
我只是想要一些东西,如果3个变量中的任何一个都是真的,无论它们处于什么顺序都返回true,否则返回false.有人想帮这个n00b吗?
pol*_*nts 13
这个具体问题会有很多好的解决方案,但我会专注于
boolean教育目的的逻辑
你会想要这样做:
(a == "password") || (a == "email) || (a == "password")
Run Code Online (Sandbox Code Playgroud)
编程语言不像英语:它有严格的语法规则,而不是说:
"if x is 3 or 5"
Run Code Online (Sandbox Code Playgroud)
在大多数编程语言中,你必须说:
if x is 3 or x is 5
Run Code Online (Sandbox Code Playgroud)
同样,在数学符号中常见的地方是:
"if a < b < c"
Run Code Online (Sandbox Code Playgroud)
在大多数编程语言中,你必须说:
if a < b and b < c
Run Code Online (Sandbox Code Playgroud)
让我们看看您的实验会发生什么:
a == "password" || "email"
Run Code Online (Sandbox Code Playgroud)
由于所谓的"运算符优先级",这被解析为:
(a == "password") || "email"
Run Code Online (Sandbox Code Playgroud)
现在,因为a == "email",这基本上评估为:
false || "email"
Run Code Online (Sandbox Code Playgroud)
这就是为什么这个表达式的评估结果"email".
同样,:
a == "email" || "password"
Run Code Online (Sandbox Code Playgroud)
这本质上是
true || "password"
Run Code Online (Sandbox Code Playgroud)
这就是它评估的原因true.
该case声明也适合匹配这个或那个或......
case email
when "password", "email", "whatever"
puts "found a match: #{email}"
else
puts "no match"
end
Run Code Online (Sandbox Code Playgroud)