initializer.rb Rails::Initialzier是用来建立Rails环境的主要类。Initializer是在config/environment.rb里面触发的,它里面包含了下面的一个代码块: Rails::Initializer.run do |config| # (configuration) end Rails::Initializer.run带进一个新的对象Rails::Configuration到这个代码块里。然后,run创建一个新的Rails::Initializer对象并且调用他的process方法,这个方法依次用下面的步骤来初始化Rail ...
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        ...
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 ...
请先参阅 http://www-128.ibm.com/developerworks/cn/opensource/os-lightweight9/ http://www.javaeye.com/post/168845 翻译的晦涩难懂,多多关照 ============================================================= 延续(Continuations ) 延续(Continuations )是一个很强大的流程控制机制。一个延续(Continuation)表现为一个特定的调用栈和词 法变量状态。他是在执行Ruby代码一个点上的快照。不幸的是 ...
Metaprogramming Techniques 前面已经讲述了Ruby的一些基础,后面是在Rails里面常见的元编程的技术。 尽管例子都是用Ruby书写的,这些技术大部分可以是对任何动态语言适用的。实际上,Ruby的元编程的语法是在像Lisp,Smalltalk和Perl里借鉴的。 运行时方法查找 我们经常需要的是创建一个根据一些运行时的数据变化的函数的接口。最突出的例子是Rails里面的ActiveRecord的属性的accessor方法。对ActiveReord的方法调用会在运行时被转化成属性的入口。在类—方法的层面上,ActiveRecord提供了相当好的便利:Person ...
Block, Method and Proc Ruby的一个很强大的功能就是有把一小片代码作为对象处理的能力。一共有如下的3类: Proc: 一个Proc表现为一个代码块,这个代码块可以带参数调用,并且给出一个返回值。 UnboundMethod: 和Proc比较象。它表现为一个类的实例方法。(要注意的是类方法是一个类对象的实例方法,所以UnboundMethod也可以表现为类方法)。一个UnboundMethod在调用前一定要bound到一个类。 Method: Method 对象是以经通过UnboundMethod#bound 而bound到一个对象的UnboundMethods。还 ...
变量查找 在Ruby里有4种变量类型:全局变量,类变量,实例变量和局部变量。全局变量是全局储存的,局部变量储存是lexically,这里他们和我们的讨论不相关,因为他们和Ruby的类系统没有交互。 实例变量是对于一个特定的对象。它用一个@最为前缀来定义:@price是一个实例变量。正因为Ruby的对象有一个v_tbl的结构,任何一个对象就可以有实例变量。 一个类也是一个对象,所以类也有实例变量。下面的代码访问一个类的实例变量 class A @ivar = "Instance variable of A" end A.instance_variable_get ...
Metaid why the lucky stiff 为Ruby的原编程创建了一个名字为metaid.rb的库。这段小程序可以包含在任何需要原编程的项目里,而且非常有用。 class Object # The hidden singleton lurks behind everyone def metaclass; class << self; self; end; end def meta_eval &blk; metaclass.instance_eval &blk; end # Adds methods to a m ...
Ruby 基础 类和方法 类和方法是Ruby里面向对象的基础。类便利了关系的包装和分解。模块可以用来做mixins—用一替代多继承来把一堆功能添加到类里面已增加类的行为。模块的另一个作用就是把类分到命名空间(namespace) 里。 在Ruby里,类的名字是一个常量。这就是为什么Ruby要求类的名字必须以大写字母开头的原因。这些常量会记值在类的对象里,这个对象就是类Class的一个对象。这个和Class对象是不同的,Class是一个类。“class object”表示一个类。“Class object”是一个类,名字是Class,它是所有类对象的superclass。 类Class继 ...
什么是元编程(MetaPrograming) 元编程时一中用代码来产生代码或者依据自己内省的一种编程技巧。 元编程在很多语言里都有应用,但是因为动态语言有更好的运行时能力以操作数据的形式来操纵代码而是元编程更加有效。 元编程的两个层次 Syntactic introspection 最底层的内省,直接处理程序内容或者句原流。一般来说,基于模版和基于宏的元编程属于这一类。 Semantic introspection 通过语言的高级数据类型来处理代码。在Ruby里,整体上来说是工作的类和方法的层次上:创建、重写和别名方法;截取方法调用;操作继承链。和句法的方法,这些技术更加和已存在的 ...
1. install the pdf-writer gem install pdf-writer 2. require & register in the rails env. #vi environment.rb require 'pdf/writer' Mime::Type.register 'application/pdf', :pdf 3. usage: # lib/product_drawer.rb def self.draw(products) pdf = PDF::Writer.new products.each do ...
本文的例子来源于Ruby on Rails Rake Tutorial Rake是make衍生出来的一个工具。 像make一样,它需要一个Rakefile的文件来做为默认的任务定制文件。在这个文件里可以指定一些任务,由rake来解释执行。 task :purchaseAlcohol do puts "Purchased Vodka" end task :mixDrink do puts "Mixed Fuzzy Navel" end task :getSmashed do puts "Dood, everthing's blurry, can I ...
类似于自动完成的功能。 下面开始Coding  建立我们的数据库 def self.up create_table "recipes" do |t| t.column "name", :string t.column "region", :string t.column "instructions", :text end create_table "ingredients" do |t| t.column "recipe_id", :integer t.column "name", :string t ...
用prototype完成用户预览功能。 在layout里面加载prototype.js <%= include_javascript_tag "prototype" %> 用一个日记的例子,定义一个model class Entry, 在里面定义title, body. class Entry attr_accessor :title, :body end 还有一个DiaryController: def new @entry = Entry.new end 定义这个action的view <% form_tag(:action ...
写自己的magical one-liners for Javascript. 继续上一章的in_place_editor, 完成一个in_place_select_editor. 在rails里,InPlaceEditor是在 public/javascripts/control.js里面定义的,单击click会触发enterEditMode方法,然后由createForm()和createEditField()生成form. 目标:继承InPlaceEditor, 重写createEditField()完成select_editor. 创建一个新的js文件:public/javascri ...
在rails里使用script.acluo.us的 InPlaceEditor control/accompanying helpers使In-Place From Editing更简单。 做一个脚手架,建好数据库。 rails 2里面需要安装in_place_editing plugin ruby script/plugin install in_place_editing 1. 使用Ajax,在View layout面加入Javascript 放在layout里 app/views/layouts/对整个控制器有效 <%= javascript_include_tag :d ...
magixyu
搜索本博客
我的相册
6094f4dd-25cb-3e9a-ba83-0f5e59d1f616-thumb
android
共 3 张
最近加入圈子
存档
最新评论