(Ruby)将字符串转换为代码行?

时间:2016-08-07 06:04:06

标签: ruby string text conditional-statements

所以,对于我正在进行的游戏,我们说我在一个咒语的评论框中放了一些文字:

[["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>>以便将其转化为数据。

3 个答案:

答案 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

我们通常不会尝试将代码填充到注释中,而是尝试反过来:将注释写入代码。更确切地说,编写可以在没有注释的情况下理解的自解释代码。我们称之为文学编程。