Project1

标题: 【Ruby】when的判断与==的区别 [打印本页]

作者: 寒冷魔王    时间: 2015-1-29 00:43
标题: 【Ruby】when的判断与==的区别
本帖最后由 寒冷魔王 于 2015-1-29 00:45 编辑

如下代码:
  1. data = Array.new
  2. case data.class
  3. when Array
  4.   puts "OK in When Class"
  5. end
  6. p data.class == Array

  7. array = [0,0]
  8. case array
  9. when [0,0]
  10.   puts "OK in When Array"
  11. end
  12. p array == [0,0]
复制代码
结果:
  1. true
  2. OK in When Array
  3. true
复制代码
该代码在Ruby 2.2.0 on Linux下测试。
作者: RyanBern    时间: 2015-1-29 09:21
本帖最后由 RyanBern 于 2015-1-29 09:24 编辑

case~when进行判断利用的运算符为'===',不是'=='
  1. case data
  2. when Array
  3.   puts "OK"
  4. end
复制代码
默认情况下,'==='的含义和'=='相同,但是如果进行了重新定义,二者含义不同。
对于Class类的对象,'==='的含义发生改变。
self === other和other.is_a?(self)功能类似
所以那样用case~when是不对的。
作者: chd114    时间: 2015-1-30 10:05
我一直以为when和==的区别就是
x=rand(5)

case x
when 0,1,2,3
p 520
end

if x==0 or x==1 or x==2 or x==3
p 520
end




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1