2016-08-07 73 views
1

因此,對於比賽我的工作,讓我們說我說得有點文本在法術的評論框:(Ruby)將字符串轉換爲一行代碼?

<secondary effects: [["Flame", 15, true], ["Poison", 0.08, true]]>

通過使用條功能,我可以減少文本下跌到:

[["Flame", 15, true], ["Poison", 0.08, true]]

,然後將其存儲在data變量,所以

data = "[["Flame", 15, true], ["Poison, 0.08, true]]"

現在,我怎麼能轉換本文翻譯成代碼,這樣我就可以在法術的傷害過程中做出的條件,如:

if data[0][2] == true then *something* end

很顯然,我不能在文本中使用eval爲了使其成爲數據。

回答

0

下面是一個非常簡單和快速的解決方案。

data = eval('[["Flame", 15, true], ["Poison", 0.08, true]]') 

請確保火焰有兩個引號圍繞它,但毒藥沒有。如果這是一個錯字,那麼上面就會按原樣工作,但如果不是這樣的話,那麼您將需要爲任何給定的字符串添加適當的引號。

如果你不想使用評估,那麼你可以做下面的事情。

'[["Flame", 15, true], ["Poison", 0.08, true]]'.gsub(/[\[\]]/,'').split(",").each_slice(3).to_a 
+0

暗示'eval'沒有關於其用法的警告不是一個好主意。當某人輸入'rm -rf /'到該框中時的圖像... – spickermann

+0

建議僅將字符串轉換爲不是整個代碼。但是如果是這種情況,你可以使用'[[「Flame」,15,true],[「Poison」,0.08,true]]。'gsub(/ [\ [\]] /,'') .split(「,」)。each_slice(3).to_a,您可以根據需要使解決方案更具動態性。 –

3

您的例子是JSON符合字符串(固定失蹤"後)。因此,我只想用一個JSON.parse:將數據放入意見在Ruby是一種氣味的

string = '[["Flame", 15, true], ["Poison", 0.08, true]]' 
#=> "[[\"Flame\", 15, true], [\"Poison\", 0.08, true]]" 

require 'json' 
JSON.parse(string) 
#=> [["Flame", 15, true], ["Poison", 0.08, true]] 
+1

這是答案。使用數據語言來處理數據。 –

+0

當我在tutorialspoint dot com的執行測試中對此進行測試時,此過程可以正常工作,但是對於我正在使用的程序RPGMakerVXAce,它說'沒有找到此文件'用於json。當我讀到它時,JSON是一種JavaScript語言解釋器,但在以後幾年中已被用於多種編程語言。也許這個程序使用Ruby的早期版本,或者它根本不包括在內? – Mitchell

+0

您使用的是哪個版本的Ruby?在命令行中調用'ruby -v'。 – spickermann

0

整體思路。但首先,讓我從字面上回答你的問題:任何字符串 Ruby中的代碼行。看它是否是一個有效的,你只是eval它:

string = "[{foo: 1}, {bar: 2}]" 
data = eval string 
data[0][:foo] #=> 1 

,而不是試圖填充碼爲註釋,在Ruby中,我們通常會盡量做相反:東西註釋爲代碼。更確切地說,寫出不需要評論即可理解的自解釋代碼。我們稱之爲識字編程。