Ruby 有关空指针保护模式的一段代码的疑问

runup · 2015年01月15日 · 最后由 runup 回复于 2015年01月21日 · 2225 次阅读

问题描述:如何理解这段文字描述的“这个类被存储在一个名为@time_class的类实例变量中”,我的理解是这个类实例变量是@time_class是一直都是 nil,并没有被赋值,同时行文中提到的空指针模式一般指的是 a|| = [] 的形式,或者 a = a||[] 的形式,难道在调用类方法的时候,因为@time_class为 nil,会给这个类实例变量赋值?

目测是 @time_class ||= Time,可能是翻译时漏写了。

#1 楼 @alixiaomiao 我看过第二版英文版,里面也是我文中提到的写法。

最后一个表达式的值会成为返回值。

@time_class || Time

是一个或表达式。

空指针保护不一定要给 @time_class 赋值,只要保证 time_class 这个类方法不会返回 nil,中断程序就行。

感觉是写错了,否则就是代码有一部分没交代清楚

#5 楼 @48hour 是 ruby metaprogramming 第一版的内容,我查看了最新的第二版,代码还是老样子。

我看了书,原书这样实现是为了方便测试,不测试的时候@time_class永远为空

#7 楼 @48hour 那这句话应该是错得了““这个类被存储在一个名为@time_class的类实例变量中”

需要 登录 后方可回复, 如果你还没有账号请 注册新账号