2014-09-10 51 views
0

我想使用Eval創建一個類的實例。使用eval後訪問實例對象

這是完美的。

但我不能訪問該對象。

carreg = "bmw" 

Eval(carreg+"= Car.new")  < should evaluate to bmw = Car.new 

這很好。完善。但是當我輸入bmw.inspect時,沒有任何反應。有任何想法嗎 ?

編輯:

在IRB如果我做手工bmw = Car.new,然後我就可以訪問該對象......像bmw.inspect

+3

爲什麼你爲此使用'eval'?你是否認爲你正試圖解決錯誤的問題? – 2014-09-10 22:31:15

+0

Ruby新的Ruby。請耐心等待:-) 那麼就這樣吧,即時通知用戶 'puts「Reg板?」' 'carreg = gets.chomp'。 我還能如何做到這一點? – 2014-09-10 22:45:42

+0

你不會這麼做,你只會說'car = Car.new(carreg)',讓'Car'知道它是一個BWM。 – 2014-09-10 22:56:51

回答

0

你需要看看補課是如何工作的。

class Car 
    attr_accessor :carreg 

    def display 
     puts "CarReg = #{@carreg}" 
    end 
end 


car = Car.new 
car.carreg = gets.chomp 
car.display 

嘗試類似的東西。

+0

謝謝你,但我想我已經得到了我想要的東西。我的類在initialize方法中有一個'@@ instances << self'。我現在已經制作了一個方法,例如'def self.instances @@ instances end',可以訪問Car類型的對象的詳細信息: 'Car.instances.each {| a |把「Car Reg:#{a.reg}」如果a.reg == regnum}' – 2014-09-10 23:59:01

+0

現在,問題是從特定類型的對象訪問propertys等的正確方法嗎?想法是,如果用戶想要查看特定汽車的特性,他們需要提供註冊編號,然後代碼將使用它來查找對象。 (我可能會過於複雜的東西......但只是想學習) – 2014-09-11 00:03:30

+0

問題爲什麼我不能使用你的代碼@ user2891803是什麼如果你可能有更多的一輛'汽車'。在你的例子中,可能有多個carreg,所以每當gets.chomp被調用時,它都會覆蓋該屬性。這就是爲什麼我想要汽車的多個對象 – 2014-09-11 00:08:05