所以,对于我正在进行的游戏,我们说我在一个咒语的评论框中放了一些文字:
[["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
显然,我无法在文字上使用Dictionary<String, Array<String>>
以便将其转化为数据。
答案 0 :(得分:3)
您的示例是JSON符合字符串(修复丢失的"
后)。因此,我只想使用JSON.parse
:
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)
以下是一个非常简单快速的解决方案。
data = eval('[["Flame", 15, true], ["Poison", 0.08, true]]')
请确保Flame有两个引号,但Poison没有。如果它是一个拼写错误,那么上面将按原样工作,但如果不是这样,那么你需要在任何给定的字符串中添加适当的引号。
如果您不想使用eval,那么您可以执行以下操作。
'[["Flame", 15, true], ["Poison", 0.08, true]]'.gsub(/[\[\]]/,'').split(",").each_slice(3).to_a
答案 2 :(得分:0)
在Ruby中将数据放入注释的整个想法是一种气味。但首先,让我从字面上回答你的问题:任何字符串都是 Ruby中的代码行。要查看它是否为有效行,您只需eval
:
string = "[{foo: 1}, {bar: 2}]"
data = eval string
data[0][:foo] #=> 1
我们通常不会尝试将代码填充到注释中,而是尝试反过来:将注释写入代码。更确切地说,编写可以在没有注释的情况下理解的自解释代码。我们称之为文学编程。