#16 楼 @rei @kikyous @kikyous 看书的时候遇到下面的代码,似乎和我对问题的理解以及您的解释有点相悖,代码如下:
class MyClass
def my_method(my_arg)
puts my_arg*2
end
end
obj = MyClass.new
obj.send(:my_method, 3) #=>6
obj.send("my_method", 6) #=>6
obj.send(my_method, 6) #=> undefined variable or method error
问题中将 mouse 当做是方法,把:mouse 当做是一个符号对象,而这里却刚好相反。 还是说send的这种方式是一种约定?
#17 楼 @qinfanpeng 能不能帮忙看看我的新问题如何理解 Module 类里面的 module methods,感谢。
谢谢楼上各位的指点,感激。
#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 是否有返回值?