07 2014 档案
摘要:ruby具有在运行时执行以字符串形式保存的代码的功能设施,eval族方法 。包括Kernel#eval,Object#instance_eval,Module#class_eval。 Kernel#eval 它是最直接的方法如下:1 p eval("2+2")2 3 eval("def m...
阅读全文
摘要:上一篇讲了ruby中的可调用对象proc和lambda,他们都是块转换成的对象。ruby中的可调用对象还有方法。通过使用method方法,并且以方法名作为参数(字符串或者符号),就可以得到一个方法对象。如下:1 class C2 def talk3 p "hello wo...
阅读全文
摘要:ruby中将块转变成对象的三种方法 ruby中的大部分东西都是对象,但是块不是。那么,如果你想存下来一个块,方便以后使用,你就需要一个对象。ruby中有三种方法,把块转换成可以利用的对象。Proc.new lambda #kernel的方法proc #等价于Proc.new这三...
阅读全文
摘要:ruby中的方法调用都是 对象.方法 的形式,那么对象如何找到这个方法呢? 首先必须了解祖先链的概念,祖先链就是从一个类开始,到它的父类,再到父类的父类...一直到最终的起点(ruby中是BasicObject类)。这期间经历过的路径就是祖先链。 1混含模块和继承的方法查找 对于一个实例对...
阅读全文
摘要:在ruby中写顶层函数的时候,总会有一个问题,self是谁,这些方法是谁的,是什么方法。如下:1 p self2 3 p self.class4 5 def talk6 p self7 end8 9 talk 输出main,Object,main 由此可见,在写顶层代码的时候,rub...
阅读全文
摘要:ruby中的私有方法是指方法只能被隐含调用,不能被显示调用。而当没有显示接收者的时候,会把self当成接收者。因此,只能在自身中调用私有方法,这也是私有方法的调用规则。 ruby的私有方法机制目的是:使得你很容易将方法分为两种,外部世界可以访问的方法和外部世界不可以访问的方法。如下: 1 cl...
阅读全文
摘要:作用域(scope)指的是变量的可达性或可见性。不同类型的变量有不同的作用域规则。与self类似,作用域在程序的执行过程中也在不断的变化,也可以根据上下文推断出"谁在什么作用域中"。但是,self和作用域不是同一个东西,在self没有变化的时候,可以开始一个新的局部作用域,有时候,作用域和sel...
阅读全文
摘要:先看一道题,这道题是codewars上的一道题,我很早就看到了,但是不会写。等到又看到这道题的时候,我刚看完元编程那本书,觉得是可以搞定它的时候了。废话不多说,先看这道题,题目最开始是为JavaScript写的,但是也放在了ruby语言里面,这个没有关系。题目内容是有一个类Calc,通过链式方法...
阅读全文
摘要:self,自己,在ruby中表示当前对象或默认对象。程序执行的任一时刻,有且仅有一个self。1.谁成为self,在什么位置成为self?要知道哪个对象是self,就必须知道当前的上下文。上下文主要有顶层上下文,类定义上下文,模块定义上下文,方法定义上下文。可以根据下图总结的内容进行self的判断。...
阅读全文