查看: 2995|回复: 2

[已经解决] 【Ruby】when的判断与==的区别

[复制链接]

寒

梦石
0
星屑
1049
在线时间
1391 小时
注册时间
2010-8-9
回帖
3301
发表于 2015-1-29 00:43:32 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 寒冷魔王 于 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下测试。
梦石
0
星屑
9557
在线时间
5074 小时
注册时间
2013-6-21
回帖
3459

开拓者贵宾剧作品鉴家

发表于 2015-1-29 09:21:32 | 显示全部楼层
本帖最后由 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是不对的。

点评

加上反而不对了233  发表于 2015-1-30 10:56
帮你省了一个 .class 你看 Ruby 多良心(pia  发表于 2015-1-30 10:36
这样啊,谢谢~  发表于 2015-1-29 10:09

评分

参与人数 1星屑 +200 收起 理由
恐惧剑刃 + 200 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 2015-1-30 10:05:38 | 显示全部楼层
我一直以为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
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部