为了账号安全,请及时绑定邮箱和手机立即绑定

请问在Ruby中"=="和"==="的区别?

请问在Ruby中"=="和"==="的区别?

慕虎7371278 2019-10-21 14:10:29
Ruby中"=="和"==="的区别
查看完整描述

4 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

恒等于(===):检查两个操作数是否一样,也就是检查没有进行数据类型转换的操作数的值是否相等。
==,是在一定类型转化后判断操作数的值是否相等。

查看完整回答
反对 回复 2019-10-26
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

Ruby 是一个强大的面向对象脚本语言(本文所用 Ruby 版本为1.8.6),在 Ruby 中 Symbol 表示“名字”,比如字符串的名字,标识符的名字。
创建一个 Symbol 对象的方法是在名字或者字符串前面加上冒号:

创建 symbol 对象

:foo
:test

:”abc”
:”I am a boy”

你可能会问,字符串就是字符串,干吗还有字符串的名字?这是因为在 Ruby 中字符串也是一种对象,即 String对象。无论其结构还是操作和 Symbol 对象都是不同的。
在 Ruby 中每一个对象都有唯一的对象标识符(Object Identifier),可以通过 object_id 方法来得到一个对象的标识符。我们来看看 Symbol 对象和 String 对象的差别:

Ruby 对象标识符

irb(main):001:0> puts :foo.object_id
327458
=> nil
irb(main):002:0> puts :foo.object_id
327458
=> nil
irb(main):003:0> puts :"foo".object_id
327458
=> nil
irb(main):004:0> puts "foo".object_id
24303850
=> nil
irb(main):005:0> puts "foo".object_id
24300010
=> nil
irb(main):006:0> puts "foo".object_id
24296170
=> nil



查看完整回答
反对 回复 2019-10-26
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

  1、 模块不能实例化,类不能include
  2、如果模块和类不在用一个文件中,如果要使用include,先使用require把文件引入
  3、include不是简单的将模块的实例变量和方法拷贝到类中,而是建立一个由类到所包含模块的引用
  4、如果有多个include,将依次生成代理类,最后一个include的将是该类的直接超类,依次向上衍生
  5、含有include的模块或者类定义,可以访问它所包含的常量,类变量和实例方法。如果一个模块被包含,改模块的常量,类变量,实例方法都被绑定到该类的一个匿名超类中,类的对象会响应发送给模块实例方法的消息
  6、模块里可以定义一个initialize方法,当创建包括模块的类的对象时,满足一下条件之一,则模块的该方法将被调用.

查看完整回答
反对 回复 2019-10-26
?
holdtom

TA贡献1805条经验 获得超10个赞

区别是 MRuby 不支持超过 512 个局部变量.
CRuby 的字节码在内存使用上是比较奢侈的, 而 MRuby 为了削减内存使用, 字节码设计得和 Lua 的很相似, 而其压缩表示限制了局部变量的个数
Lua 的字节码编码方式 (32bit, A, B, C 一般为局部变量编号), 可以看到操作数最少都有 8 位, 可以表示高达 256 个局部变量!

查看完整回答
反对 回复 2019-10-26
  • 4 回答
  • 0 关注
  • 657 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信