2013年4月30日

摘要: 在ruby中,编译器并不强制方法调用时的行为,这意味着你可以调用一个并不存在的方法。例如:class Lawyer;endnick = Lawyer.newnick.talk_simpleNoMethodError: undefined method ‘talk_simple’ ……当调用talk_simple()方法时,ruby会到nick对象的类中查询它的实例方法,如果找不到,ruby会沿着祖先链向上搜寻进入Object类,并最终来到Kernel模块。由于ruby没有找到talk_simple()方法,ruby只好承认自己失败了,并在nick对象(最初的接收者)上调用一个名为method_ 阅读全文
posted @ 2013-04-30 22:02 巴晓鹏 阅读(1183) 评论(2) 推荐(0)
 
摘要: 当你调用一个方法时,通常会使用点(。)标记符,代码如下:class MyClass def my_method(my_arg) my_arg * 2 endendobj = MyClass.newobj.my_method(3) #=>6用Object#send()方法可以取代(。):obj.send(:my_method, 3) #=>6send()方法的第一个参数是你要发送给对象的消息,也就是方法的名字。这里既可以使用字符串,也可以使用符号。但是一般认为符号会更好一些。所有剩下的参数(以及代码块)会直接传递给调用的... 阅读全文
posted @ 2013-04-30 20:38 巴晓鹏 阅读(388) 评论(0) 推荐(1)
 
摘要: 当一个类include多个模块,而这些模块中又有同名的方法时,类中调用的会是哪个模块的方法呢?先看下面的代码:module Printable def print #... end def prepare_cover #... endendmodule Document def print_to_screen prepare_cover format_for_screen ... 阅读全文
posted @ 2013-04-30 09:58 巴晓鹏 阅读(771) 评论(0) 推荐(1)