2013-06-04 59 views

回答

2
irb(main):001:0> class C 
irb(main):002:1> end 
=> nil 
irb(main):003:0> a = C.new 
=> #<C:0xb73aac70> 
irb(main):004:0> b = C.new 
=> #<C:0xb73a5838> 
irb(main):005:0> a.instance_variable_set(:@a, 1) 
=> 1 
irb(main):006:0> a.instance_variable_set(:@b, 2) 
=> 2 
irb(main):007:0> b.instance_variable_set(:@test1, 11) 
=> 11 
irb(main):008:0> a 
=> #<C:0xb73aac70 @b=2, @a=1> 
irb(main):009:0> b 
=> #<C:0xb73a5838 @test1=11> 
+0

這兩個答案都很好,但這與Python的行爲更接近。 – user2398029

+0

Ouch,Ruby是新的Perl。 –

+0

哦,很好,我可以通過instance_variable_get獲得變量 – user1887348

7

除非有更多的您的使用情況所呈現的,這似乎是一個好地方,使用OpenStruct

require 'ostruct' 

a = OpenStruct.new 
b = OpenStruct.new 

a.a = 1 
a.b = 2 
b.test1 = 11 

[a.a, a.b, b.test1] 
# => [1, 2, 11] 

根據您的使用情況,您可能希望:

require 'ostruct' 

class C < OpenStruct 
    # You may want stuff in here... 
end 

a = C.new 
b = C.new 

a.a = 1 
a.b = 2 
b.test1 = 11 

[a.a, a.b, b.test1] 
# => [1, 2, 11] 

兩種使用OpenStruct的方法都不是Python代碼的精確平行,而是其中一個似乎是li如果您不嚴格需要,請按照比instance_variable_set更乾淨的方式來執行您想要的任何操作。

相關問題