谢谢楼上各位的指点,感激。
#2 楼 @qinfanpeng 能不能请帮忙看下我的理解问题在哪里?感谢。
#1 楼 @nowherekai 非常感谢指出问题,这两句话我理解,在这里 gets 和 ARGV 指向相同的字符串内容,我的疑惑是 while 的作用,while 这里是做判断,返回值应该是 true 或者 false,所以 print 打印的应该也是 while gets 的返回值才对。
#3 楼 @quakewang bingo 返回和输出返回值是两码事情。
#1 楼 @quakewang windows 下的终端,ruby 版本 2.1
#10 楼 @torubylist 代码自己执行一遍就好了
问题解决:因为“.”是可以匹配任何“一个”字符,因此这里(.)不能匹配 mouse,因为 mouse 有五个字符,所有正确的做法是应该使用(.*)或者(.+)的方法匹配任意多的字符,其中前者表示重复 0 次及以上,后者表示重复 1 次及以上。
第二个问题终于搞明白了,之前出现困惑的原因是因为我认为下面的代码:
@time_class = FakeTime
是通过 FakeTime 的返回值对@time_class进行赋值,因为 FakeTime 没有返回值,因此这样的赋值没有意义。但实际上真正的理解是类 FakeTime 直接赋值给实例变量@time_class,然后通过后面的@time_class.time_class.now,也就是 FakeTime.time_class.now 获取固定的时间值。
#15 楼 @torubylist 第二版页码多少?
#13 楼 @torubylist 是第一版的 4.2 节么?
#2 楼 @luolinae86 在原编程书中 115 页找到一段代码,原理是不是也是同样的?代码如下:
class Book
def lend_to(user)
puts "lending to #{user}"
end
def self.deprecated(old_method, new_method)
define_method(old_method) do |xargs, &block|
warn "Waring: #{old_method} () is deprecated, Use #{new_method}"
send(new_method, xargs, &block)
end
end
deprecated(:LEND_TO_USER, :lend_to)
end
b = Book.new
b.LEND_TO_USER("bill")
#9 楼 @torubylist 原问题已经补全代码,添加了 Load 类,我明白是在修改当前类,我是想问直接调用 FakeTime 这个类给当类实例变量赋值,但是直接调用的 FakeTime 是否有返回值?
#1 楼 @qinfanpeng 问题二涉及到类实例变量? 我觉得这里没有涉及到类实例变量吧,见如下代码:
class Demo
def self.class_method
puts "this is the class method"
end
end
Demo
在终端执行下面代码,是没有返回值的,那为何@time_class = FakeTime 可以赋值成功?
#1 楼 @qinfanpeng 能不能帮我看看上面的理解是否合适?感谢。
#3 楼 @adamshen “定义一个类就是执行一段代码”这句话如何理解? 如下代码:
class Demo
def instance_method
puts "this is the instance method"
end
def self.class_method
puts "this is the class method"
end
class_method
end
obj = Demo.new
obj.instance_method
在类中定义了实例方法和类方法,类中对类方法调用之后,执行成功。在类外部生成实例化对象,实例化对象调用实例方法,执行成功。 所以定义一个类就是执行一段代码是否可以理解为:在类的作用域内,执行代码,比如执行 class_method 这个类作用域中的方法,而对于类作用域外的代码,则不执行,对于标示了 def 的代码块,这个代码块其实不在类的作用域内,因为作用域分割符号为 class,module,def。这样的理解是否合适?