亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2697 | 回復(fù): 1
打印 上一主題 下一主題

動態(tài)定義ruby子類,和判斷是否定義 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-03-01 17:06 |只看該作者 |倒序瀏覽
動態(tài)定義ruby子類,和判斷是否定義






rubydymanic_programming
上篇有個標(biāo)準的定義動態(tài)類變量
Ruby代碼
  1. class MyClass   
  2.   class << self  
  3.     attr_accessor :my_constant  
  4.   end  
  5.   def my_method   
  6.     self.class.my_constant = "blah"  
  7.   end  
  8. end  
  9.   
  10. p MyClass.my_constant #=> nil   
  11. MyClass.new.my_method   
  12.   
  13. p MyClass.my_constant #=> "blah"  

  14. class MyClass
  15.   class << self
  16.     attr_accessor :my_constant
  17.   end
  18.   def my_method
  19.     self.class.my_constant = "blah"
  20.   end
  21. end

  22. p MyClass.my_constant #=> nil
  23. MyClass.new.my_method

  24. p MyClass.my_constant #=> "blah"
復(fù)制代碼
如果類也動態(tài)定義,那么子類和module怎么定義進去的
Ruby代碼
  1. dynamic_name = "TestEval2"  
  2.   
  3. Object.const_set(dynamic_name, Class.new{def method1() 42 end }})   
  4. dummy2 = eval("#{dynamic_name}")   
  5. puts "dummy2: #{dummy2}"  

  6. dynamic_name = "TestEval2"

  7. Object.const_set(dynamic_name, Class.new{def method1() 42 end }})
  8. dummy2 = eval("#{dynamic_name}")
  9. puts "dummy2: #{dummy2}"
復(fù)制代碼
Ruby代碼
  1. dynamic_name = "SubTestEval2"  
  2.   
  3. SubModule.const_set(dynamic_name, Class.new(TestEval2){def method1() 43 end })   
  4. dummy3 = eval("#{dynamic_name}")   
  5. puts "dummy3: #{dummy3}"  

  6. dynamic_name = "SubTestEval2"

  7. SubModule.const_set(dynamic_name, Class.new(TestEval2){def method1() 43 end })
  8. dummy3 = eval("#{dynamic_name}")
  9. puts "dummy3: #{dummy3}"
復(fù)制代碼
判斷動態(tài)類是否存在
Ruby代碼
  1. def class_exists?(class_name)   
  2.   eval("defined?(#{class_name}) && #{class_name}.is_a?(Class)") == true  
  3. end  
  4.   
  5. class_name = "Blorp"  
  6. class_exists?(class_name)   
  7. => false  
  8.   
  9. class_name = "String"  
  10. class_exists?(class_name)   
  11. => true  

  12. def class_exists?(class_name)
  13.   eval("defined?(#{class_name}) && #{class_name}.is_a?(Class)") == true
  14. end

  15. class_name = "Blorp"
  16. class_exists?(class_name)
  17. => false

  18. class_name = "String"
  19. class_exists?(class_name)
  20. => true
復(fù)制代碼

論壇徽章:
0
2 [報告]
發(fā)表于 2012-03-01 22:37 |只看該作者
謝謝分享
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP