我明白(我認爲)Ruby中一個類的類變量和實例變量之間的區別。從外部訪問一個類的實例變量
我在想如何從外部那個類訪問類的實例變量。
從內部(即在類方法而不是實例方法中),它可以直接訪問,但是從外部來看,有沒有辦法做到這一點MyClass.class.[@$#]variablename
?
我沒有任何具體的理由這樣做,只是學習Ruby,並想知道是否有可能。
我明白(我認爲)Ruby中一個類的類變量和實例變量之間的區別。從外部訪問一個類的實例變量
我在想如何從外部那個類訪問類的實例變量。
從內部(即在類方法而不是實例方法中),它可以直接訪問,但是從外部來看,有沒有辦法做到這一點MyClass.class.[@$#]variablename
?
我沒有任何具體的理由這樣做,只是學習Ruby,並想知道是否有可能。
class MyClass
@my_class_instance_var = "foo"
class << self
attr_accessor :my_class_instance_var
end
end
puts MyClass::my_class_instance_var
上述收益率:
>> foo
我相信Arkku演示瞭如何訪問類變量(@@),而不是類實例從類的外部變量(@)。
我吸引了來自本文前述:Seeing Metaclasses Clearly
Ruby有類,類對象和實例。
一個類變量屬於一個類。
一個類的實例變量 屬於一個類對象
類變量:
無障礙類及其實例內。
attr_accessor對類變量不起作用。
類的實例變量:
無障礙只能通過類。
attr_accessor如果在類中定義它,而不是在類對象中定義,則如下所示。
class A
@b = 1
class << self
attr_accessor :b
end
end
在定義上的實例的吸氣劑和setter爲類的實例變量b:
class A
@b = 1
class << self
attr_accessor :b
end
def b
A.b
end
def b=(value)
A.b=value
end
end
現在類的實例變量b可通過所有者類及其實例進行訪問。
作爲一個幾天的紅寶石學習者,這是我能做的最多的。
`irb(main):021:0* class A
irb(main):022:1> @b = 1
irb(main):023:1> class << self
irb(main):024:2> attr_accessor :b
irb(main):025:2> end
irb(main):026:1> def b
irb(main):027:2> A.b
irb(main):028:2> end
irb(main):029:1> def b=(v)
irb(main):030:2> A.b=v
irb(main):031:2> end
irb(main):032:1> end
=> :b=
irb(main):033:0> A.b
=> 1
irb(main):034:0> c = A.new
=> #<A:0x00000003054440>
irb(main):035:0> c.b
=> 1
irb(main):036:0> c.b= 50
=> 50
irb(main):037:0> A.b
=> 50
irb(main):038:0>`
是的,我王建宇,山西高等學校喜歡紅寶石......異更好的解決方案。
在Ruby中,你可以通過兩種方式
讓我解釋上面的方法,供您手動定義getter和setter方法
手動定義吸氣器和吸氣器
class Human
def sex=(gender)
@sex = gender
end
def sex
@sex
end
end
//from outside class
human = Human.new
// getter method call
puts human.sex
// setter method call to explicitly set the instance variable
human.sex = 'female'
puts human.sex
// now this prints female which is set
使用attr_ *方法
class Human
attr_accessor :sex
end
//from outside
human = Human.new
// getter method call
puts human.sex
// setter method call to explicitly set the instance variable
human.sex = 'female'
puts human.sex
// now this prints female which is set
attr_accessor內部爲您創建setter和getter方法,如果你只想要設定裝置,你可以只使用attr_writer,如果你想只吸氣劑可以使用attr_reader。
我希望我回答你的問題