论坛首页 Ruby版 ruby

Ruby and Metaprogramming

浏览 279 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (16)
作者 正文
时间:2008-03-02
J2EE app 一般都有用到 xDoclet 做一些宣告然後再產生程式碼. Java 1.5 開始支援 Annotation 功能來解決這方面需要. 其實 Ruby 拜本身就是 dynamic 語言之賜, 它這方面的方法可就高明多了, 這也就是為何 Rails 看起來又像是 metaprogramming 的原因. 




請參考這篇說明, Metaprogramming Ruby 
Ruby 不用 setXXX, getXXX, 而是用稱為 attribute accessor 這種方法.

class Book
  def initialize(title)
    @title = title
  end

  def title
    @title
  end
  def title=(value)
    @title = value
  end
end

b = Book.new("Ruby Programming");
puts b.title
b.title = "Ruby Programming 2nd" 
puts b.title
更進一步, 可以用 Ruby 來開發你自己的 programming language 一樣, 可以將上面存取 @title 的兩個方法給作掉, Ruby 內建 attr_reader, attr_write, attr_accessor 這幾個 methods 就是為了這個目地. 如此一來, 你就可以把程式改寫為:

class Book
  attr_accessor :title

  def initialize(title)
    @title = title
  end
end

b = Book.new("Ruby Programming");
puts b.title
b.title = "Ruby Programming 2nd" 
puts b.title
是不是簡單又直覺? 就是提供一些新的 methods, 就可以輕鬆咦髂愕?class. 這就是 Rails 為何都不需用其它檔案來輔助做設定, 利用這些技巧在加上 coding convention, 就很漂亮, 所以不知道 Rails 用法時就是找那些 method 說明就對了. 
Showing changes from revision #3 to #4: Added | Removed 

J2EE app 一般都有用到 xDoclet 做一些宣告然後再產生程式碼. Java 1.5 開始支援 Annotation 功能來解決這方面需要. 其實 Ruby 拜本身就是 dynamic 語言之賜, 它這方面的方法可就高明多了, 這也就是為何 Rails 看起來又像是 metaprogramming 的原因. 
請參考這篇說明, Metaprogramming Ruby 
Ruby 不用 setXXX, getXXX, 而是用稱為 attribute accessor 這種方法.

class Book
  def initialize(title)
    @title = title
  end

  def title
    @title
  end
  def title=(value)
    @title = value
  end
end

b = Book.new("Ruby Programming");
puts b.title
b.title = "Ruby Programming 2nd" 
puts b.title

		更進一步, 可以用 Ruby 來開發你自己的 programming language 一樣, 可以將上面存取 @title 的兩個方法給作掉, Ruby 內建 attr_reader, attr_write, attr_accessor 這幾個 methods 就是為了這個目地. 如此一來, 你就可以把程式改寫為:
class Book
  attr_accessor :title

  def initialize(title)
    @title = title
  end
end

b = Book.new("Ruby Programming");
puts b.title
b.title = "Ruby Programming 2nd" 
puts b.title

		是不是簡單又直覺? 就是提供一些新的 methods, 就可以輕鬆咦髂愕?class. 這就是 Rails 為何都不需用其它檔案來輔助做設定, 利用這些技巧在加上 coding convention, 就很漂亮, 所以不知道 Rails 用法時就是找那些 method 說明就對了.

摘自:EasyTime
   
论坛首页 Ruby版 ruby

跳转论坛: