2010-03-27 52 views
18

我剛剛開始學習Ruby,並且編寫了一個程序來生成一些數字並將它們分配給變量@one,@two,@three等。然後用戶可以通過輸入它的名字來指定一個變量(例如一個)。然後我需要做一些像'@ [valueofinout] = asd'。我該如何做到這一點,有沒有更好的方式,因爲我想到的方式似乎很沮喪?我發現在Ruby中使用變量的值作爲另一個變量名

x = "myvar" 
myvar = "hi" 
eval(x) -> "hi" 

,但我不完全理解爲什麼需要第二行。在我來說,我會使用類似可以通過此方法來檢索

@one = "21" 
input = "one" 
input = "@" + input 
changeto = "22" 
eval(input) -> changeto 

回答

28

使用instance_variable_setrubydoc

instance_variable_set("@" + varname, value) 

在大多數情況下,雖然,你應該從你的用戶與之交互變量分開你的正常的Ruby變量。如何創建一個用戶變量散列,例如

@uservars = { 'one' => 1, 'two' => 2 } 
two = @uservars['two'] # Look up 'two' variable 

varname = "myvar" 
@uservars[varname] = 5 # Set a variable by name 
value = @uservars[varname] # Get a variable by name 
+1

哇,這實際上是PHP在語法清潔方面勝過Ruby的一個領域。 http://stackoverflow.com/a/4169891/2951835 – ahnbizcad 2015-05-09 07:06:18

+0

Ruby很難做,因爲它很醜,除非是元編程,否則很少需要設置實例的用戶指定變量。動態地混淆全局變量是一個安全漏洞;如果你想要一組用戶定義的變量,那麼你可能需要一個散列。 – rjh 2016-11-16 17:30:21

2

實例變量:

input = instance_variable_get("@one") 

在此之後,你的情況,你必須input等於「21」。

+0

嗨,我不太清楚這是否會爲我需要的工作。我需要有一些東西,將一個變量分配一定的數字(比如變量A),但變量A的名字是未知的。變量A的名稱存儲在變量B中,但我需要使用變量B的值將變量A賦值給變量A. AFAICT這不能通過instance_variable_get來完成。 – hrickards 2010-03-27 17:16:41

+0

@hrickards:你知道A的可能值嗎?如果你這樣做有另一種方式。但intance_variable_get應該做你想做的! – 2010-03-27 17:20:11

+0

@Niklaos 1和49之間的整數 – hrickards 2010-03-27 17:23:44

相關問題