- 論壇徽章:
- 0
|
動態(tài)定義ruby子類,和判斷是否定義
rubydymanic_programming
上篇有個標(biāo)準的定義動態(tài)類變量
Ruby代碼- class MyClass
- class << self
- attr_accessor :my_constant
- end
- def my_method
- self.class.my_constant = "blah"
- end
- end
-
- p MyClass.my_constant #=> nil
- MyClass.new.my_method
-
- p MyClass.my_constant #=> "blah"
- class MyClass
- class << self
- attr_accessor :my_constant
- end
- def my_method
- self.class.my_constant = "blah"
- end
- end
- p MyClass.my_constant #=> nil
- MyClass.new.my_method
- p MyClass.my_constant #=> "blah"
復(fù)制代碼 如果類也動態(tài)定義,那么子類和module怎么定義進去的
Ruby代碼- dynamic_name = "TestEval2"
-
- Object.const_set(dynamic_name, Class.new{def method1() 42 end }})
- dummy2 = eval("#{dynamic_name}")
- puts "dummy2: #{dummy2}"
- dynamic_name = "TestEval2"
- Object.const_set(dynamic_name, Class.new{def method1() 42 end }})
- dummy2 = eval("#{dynamic_name}")
- puts "dummy2: #{dummy2}"
復(fù)制代碼 Ruby代碼- dynamic_name = "SubTestEval2"
-
- SubModule.const_set(dynamic_name, Class.new(TestEval2){def method1() 43 end })
- dummy3 = eval("#{dynamic_name}")
- puts "dummy3: #{dummy3}"
- dynamic_name = "SubTestEval2"
- SubModule.const_set(dynamic_name, Class.new(TestEval2){def method1() 43 end })
- dummy3 = eval("#{dynamic_name}")
- puts "dummy3: #{dummy3}"
復(fù)制代碼 判斷動態(tài)類是否存在
Ruby代碼- def class_exists?(class_name)
- eval("defined?(#{class_name}) && #{class_name}.is_a?(Class)") == true
- end
-
- class_name = "Blorp"
- class_exists?(class_name)
- => false
-
- class_name = "String"
- class_exists?(class_name)
- => true
- def class_exists?(class_name)
- eval("defined?(#{class_name}) && #{class_name}.is_a?(Class)") == true
- end
- class_name = "Blorp"
- class_exists?(class_name)
- => false
- class_name = "String"
- class_exists?(class_name)
- => true
復(fù)制代碼 |
|