因此,对于我正在开发的游戏,假设我在咒语的评论框中添加了一些文本:
<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
来将其变成数据。
您的示例是一个 JSON 一致字符串(修复缺失的
"
后)。因此,我只会使用 JSON.parse
:
data = '[["Flame", 15, true], ["Poison", 0.08, true]]'
#=> "[[\"Flame\", 15, true], [\"Poison\", 0.08, true]]"
require 'json'
JSON.parse(data)
#=> [["Flame", 15, true], ["Poison", 0.08, true]]
在 Ruby 中将数据放入注释的整个想法是一种味道。但首先,让我从字面上回答你的问题:任何字符串is都是 Ruby 中的代码行。要查看它是否是有效行,您只需
eval
它:
string = "[{foo: 1}, {bar: 2}]"
data = eval string
data[0][:foo] #=> 1
在 Ruby 中,我们通常尝试做相反的事情:将注释填充到代码中,而不是尝试将代码填充到注释中。更准确地说,是编写不言自明的代码,无需注释即可理解。我们称之为文学编程。
下面是一个非常简单快速的解决方案。
data = eval('[["Flame", 15, true], ["Poison", 0.08, true]]')
请确保“火焰”周围有两个引号,但“毒药”没有。如果这是一个拼写错误,那么上面的内容将按原样工作,但如果不是这种情况,那么您将需要向任何给定的字符串添加适当的引号。
如果您不想使用 eval 那么您可以执行如下操作。
'[["Flame", 15, true], ["Poison", 0.08, true]]'.gsub(/[\[\]]/,'').split(",").each_slice(3).to_a