Ruby中的单例方法有例外吗?

Ruby中的单例方法有例外吗?,第1张

概述在 Ruby中,一切都是对象.但是当我在一个数字上尝试单例方法时,我得到了类型错误.对于一切都是对象的概念有什么例外吗? a_str = "Ruby"a_num = 100def a_str.bark puts "miaow"enda_str.bark #=> miaow (Good Cat!)def a_num.bark puts "miaow"enda_num.b 在 Ruby中,一切都是对象.但是当我在一个数字上尝试单例方法时,我得到了类型错误.对于一切都是对象的概念有什么例外吗?

a_str = "Ruby"a_num = 100def a_str.bark  puts "miaow"enda_str.bark #=> miaow (Good Cat!)def a_num.bark  puts "miaow"enda_num.bark #=> TypeError: can't define singleton method "bark" for Fixnum
解决方法 数字有点特殊,因为它们实际上并不存在于内存中的真实对象中.这是不可行的,因为它们中有很多.

相反,Ruby使用某些约定将它们模拟为对象.即你会注意到Fixnum的object_ID总是2 * i 1(i是数字).使用这种约定,Ruby可以模拟在cpu上表示为实际普通数字的数字,以获得性能和空间约束,使其看起来像Ruby程序的对象.

由于Fixnums实际上并不作为内存中的离散对象存在,因此您无法单独更改它们.相反,数字被认为是不可变的.它们通常可以用作对象,但您不能更改它们,因为它们不是实际的离散对象. Ruby中还有一些其他不可变对象,例如假的,真的,没有.

相比之下,字符串将作为一个离散的ruby对象处理,可以更改并且不是不可变的.因此它的行为类似于您将遇到的所有其他Ruby对象的大多数.

总结

以上是内存溢出为你收集整理的Ruby中的单例方法有例外吗?全部内容,希望文章能够帮你解决Ruby中的单例方法有例外吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1279985.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存