首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

head first ruby阅读笔记

今天重点看了2个内容,引用和模块。

从感觉来看,模块相当简单,引用就极其复杂了。

一个是要搞清楚,哈希到底怎样才算赋值?

另外一个很重要的是要知道,ruby一切都是对象,而对象都是放在堆上面的。而所谓变量,哈希,数组都只是存储了一个指向堆的一个引用。

引用稍微搞不过好就可能搞错对象去。

传一个块给哈希的new方法,其实相对来说是一个很蠢的方法,他其实就是调用了这样的一些语句,每次都生成一个新对象,而且为只要引用了这个键的玩意都赋值这个新对象。

然后引用有几个关键的东西,

数字是不可变的,字符串是可变的,第二个其实和python是不一样的。

然后哈希的默认对象,书中总结了一个一般性的规则,可以用数字,其他就不要用了。除非你知道后果,故意用。

如果你想和数字作为默认对象一样用的话,那你要穿个块过去,而且块里面必须要做这几件事,第一要初始化一个新对象,第二点极其重要,必须给哈希赋值。

完成这2点,应该就没啥问题了。

至于ruby中为什么字符串是可变的,文章开始的时候的图片算是一个例证。

模块是一个有意思的东西,他适用于这样一个场景,当你只想继承某个类的部分方法的时候,你就可以考虑把这些方法放到一个模块中,然后你mix这个模块到你类里就好了。

但是这样产生了代码的复制,你在超类和模块中都有一份相同的代码。

可以的话,应该这样。从超类中删除原来的方法,然后修改老的一些类,让他们也mixi相关的模块。这样的话,对老代码影响还是很大的。

还有一点有意思的是,module方法查找的优先级高于超类,这个还是吓到我了。也许由于类也是一个模块把,虽然我不知道这具体啥意思。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180718G01U6200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券