只显示主题贴
Introspection and ObjectSpace: Examining Data and Methods at Runtime
Ruby提供了很多方法用来在运行时查找对象。还有访问实例变量对象方法。使用他们的时候要当心,因为这些方法
破坏了封装。
[code="ruby"]
class C
def initialize
@ivar = 1
end
end
c = C.new
c.instance_variables ...
- 进入论坛 Ruby 版
Bindings
Bindings 提供了Ruby代码计算的上下文环境。一个binding是一组存在于代码特定位置的变量和方法。Ruby代码任何语句都可一个计算成一个binding,这个binding可以通过Kernel#bindding获得。Binding是Binding类的对象,他们可以像其他的对象一样传递:
class C
binding # => #<Binding:0x2533c>
def a_method
binding
end
end
binding # => #<Binding:0x252b0>
C.new.a ...
- 进入论坛 Ruby 版
题目上有,是Oreilly 的 Advanced Rails中的一节,翻译不好,多多包涵
可以参考以下:
http://www.javaeye.com/post/168845
- 进入论坛 Ruby 版
请先参阅
http://www-128.ibm.com/developerworks/cn/opensource/os-lightweight9/
http://www.javaeye.com/post/168845
翻译的晦涩难懂,多多关照
=============================================================
延续(Continuations )
延续(Continuations )是一个很强大的流程控制机制。一个延续(Continuation)表现为一个特定的调用栈和词
法变量状态。他是在执行Ruby代码一个点上的快照。不幸的是 ...
- 进入论坛 Ruby 版
Metaprogramming Techniques
前面已经讲述了Ruby的一些基础,后面是在Rails里面常见的元编程的技术。
尽管例子都是用Ruby书写的,这些技术大部分可以是对任何动态语言适用的。实际上,Ruby的元编程的语法是在像Lisp,Smalltalk和Perl里借鉴的。
运行时方法查找
我们经常需要的是创建一个根据一些运行时的数据变化的函数的接口。最突出的例子是Rails里面的ActiveRecord的属性的accessor方法。对ActiveReord的方法调用会在运行时被转化成属性的入口。在类—方法的层面上,ActiveRecord提供了相当好的便利:Person ...
- 进入论坛 Ruby 版
Block, Method and Proc
Ruby的一个很强大的功能就是有把一小片代码作为对象处理的能力。一共有如下的3类:
Proc:
一个Proc表现为一个代码块,这个代码块可以带参数调用,并且给出一个返回值。
UnboundMethod:
和Proc比较象。它表现为一个类的实例方法。(要注意的是类方法是一个类对象的实例方法,所以UnboundMethod也可以表现为类方法)。一个UnboundMethod在调用前一定要bound到一个类。
Method:
Method 对象是以经通过UnboundMethod#bound 而bound到一个对象的UnboundMethods。还 ...
- 进入论坛 Ruby 版
变量查找
在Ruby里有4种变量类型:全局变量,类变量,实例变量和局部变量。全局变量是全局储存的,局部变量储存是lexically,这里他们和我们的讨论不相关,因为他们和Ruby的类系统没有交互。
实例变量是对于一个特定的对象。它用一个@最为前缀来定义:@price是一个实例变量。正因为Ruby的对象有一个v_tbl的结构,任何一个对象就可以有实例变量。
一个类也是一个对象,所以类也有实例变量。下面的代码访问一个类的实例变量
class A
@ivar = "Instance variable of A"
end
A.instance_variable_get ...
- 进入论坛 Ruby 版
Ruby 基础
类和方法
类和方法是Ruby里面向对象的基础。类便利了关系的包装和分解。模块可以用来做mixins—用一替代多继承来把一堆功能添加到类里面已增加类的行为。模块的另一个作用就是把类分到命名空间(namespace) 里。
在Ruby里,类的名字是一个常量。这就是为什么Ruby要求类的名字必须以大写字母开头的原因。这些常量会记值在类的对象里,这个对象就是类Class的一个对象。这个和Class对象是不同的,Class是一个类。“class object”表示一个类。“Class object”是一个类,名字是Class,它是所有类对象的superclass。
类Class继 ...
- 进入论坛 Ruby 版
什么是元编程(MetaPrograming)
元编程时一中用代码来产生代码或者依据自己内省的一种编程技巧。
元编程在很多语言里都有应用,但是因为动态语言有更好的运行时能力以操作数据的形式来操纵代码而是元编程更加有效。
元编程的两个层次
Syntactic introspection
最底层的内省,直接处理程序内容或者句原流。一般来说,基于模版和基于宏的元编程属于这一类。
Semantic introspection
通过语言的高级数据类型来处理代码。在Ruby里,整体上来说是工作的类和方法的层次上:创建、重写和别名方法;截取方法调用;操作继承链。和句法的方法,这些技术更加和已存在的 ...
- 进入论坛 Ruby 版
我的相册
android
共 3 张
共 3 张
最近加入圈子
最新评论
-
Advanced Rails -- Ruby ...
最后搞的比c++还诡异,呵呵
-- by zsbfree -
Advanced Rails -- Ruby ...
ruby本来就诡异,难理解。你站在别人的角度理解下这个是什么意思: 【在Ruby ...
-- by flyinglife -
Advanced Rails -- Ruby ...
大哥,知道你牛,但是你写个教程认真点好不好,好多错别字,有些地方也稍微解释一下, ...
-- by flyinglife -
我收集的电子图书(51leife ...
呵呵
-- by magixyu -
我收集的电子图书(51leife ...
你有的我好像都有,哈哈!
-- by javaeyename







评论排行榜