国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Ruby元編程小結

2019-10-26 19:24:42
字體:
來源:轉載
供稿:網友

今天被問到此類問題,以前總是覺得這個是比較寬泛的一個概念,自己即使是用過這些特性,但卻一直不知道這叫“元編程” 直到今天被人問起的時候,方才頓悟一些,隨后便在網上和自己的平實用的一些元編程做個小總結。

原來所謂的Ruby中的元編程,是可以在運行時動態的操作語言結構(如類、模塊、實例變量等)的技術。你甚至于可以在不用重啟的情況下,在運行時直接鍵入一段新的Ruby代碼,并執行他。 

Ruby的元編程,也具有“利用代碼來編寫代碼”的作用。例如,常見的attr_accessor等方法就是如此。 
 
首先我能想到的自己用過的有這么幾個: 

1,respond_to? 
2,define_method 
3,instance_variable_get, instance_variable_set 
4,eval 不過這個方法能盡量避免就避免,執行效率特別低!! 

具體的意思想必一看方法名字 就知道這些方法的所要實現的邏輯。 
具體可詳見http://api.rubyonrails.org/ 上具體分析源碼,很簡單。 
 
以下是我從其他地方搜索而來,以便以后的工作中有助于提高自己的編程技能;  
 
1,內省,反射 

在Ruby中,你完全有能力在運行時查看類或對象的信息。我們可以使用class、 instance_methods、  intance_variables等方法來達到目的。我們講這種技術成為內省(Introspection)或者反射(Reflection)。 

一說編寫元程序的語言稱之為元語言。被操縱的程序的語言稱之為目標語言。一門編程語言同時也是自身的元語言的能力稱之為反射或者自反。 ——摘自維基百科元編程條目。

代碼如下: 
classRubyist 
  defwhat_does_he_do 
    @person='A Rubyist' 
    'Ruby programming' 
  end 
end 
   
an_object = Rubyist.new 
puts an_object.class# => Rubyist 
puts an_object.class.instance_methods(false)# => what_does_he_do 
an_object.what_does_he_do 
puts an_object.instance_variables# => @person 

 
 respond_to?方法是反射機制中另一個有用的方法。使用respond_to?方法,可以提前知道對象是否能夠處理你想要交與他執行的信息。所有的對象都有此方法,使用respond_to?方法,你可以確定對象是否能使用指定的方法。  
 
2,instance_eval 
  Object類提供了一個名為instance_eval的公開方法,該方法可被一個實例調用。他提供了操作對象的實例變量的途徑。可以使用字符串向此方法傳遞參數或者傳遞一個代碼塊。 
代碼如下:
classRubyist 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 惠水县| 罗定市| 濮阳市| 张家川| 崇阳县| 蛟河市| 大冶市| 都昌县| 定兴县| 新化县| 屯门区| 黎川县| 汶上县| 昭觉县| 霍林郭勒市| 黄大仙区| 仁怀市| 百色市| 同江市| 新野县| 黑水县| 石首市| 湖州市| 同德县| 云梦县| 米林县| 封开县| 盖州市| 毕节市| 荥阳市| 卓尼县| 泸溪县| 长沙县| 屏东市| 铜陵市| 克山县| 安多县| 安远县| 桂阳县| 甘肃省| 达拉特旗|