["if", "2", "<", "4"]
不使用eval
执行在Ruby中的比较我如何串在一起,这些并计算出它们是否是真实的,而不使用.eval()
?
为了便于说明,上面只是一个数组,我需要操纵内容以便评估if 2 < 4
,这应该返回true
。
["if", "2", "<", "4"]
不使用eval
执行在Ruby中的比较我如何串在一起,这些并计算出它们是否是真实的,而不使用.eval()
?
为了便于说明,上面只是一个数组,我需要操纵内容以便评估if 2 < 4
,这应该返回true
。
您可以尝试解析您的语句并将其组合成更复杂的东西。
def bool_parse(statement)
op, left, method, right = statement
left = left.to_i unless left["\'"]
right = right.to_i unless right["\'"]
case op
when "if", "elsif"
left.send(method, right)
when "unless"
!left.send(method, right)
end
end
def compose(statements)
correct = statements.detect do |s, v|
bool_parse(s)
end
correct && correct.last
end
compose({["if", "3", ">", "5"] => 1})
#=> nil
compose({["if", "3", ">", "5"] => 1, ["elsif", "2", ">", "-1"] => 2})
#=> 2
'[“if”,“2”,“<”,“4”]'这甚至不是有效的Ruby代码。你应该更清楚地说明你需要什么以及你有什么数据作为输入 – fl00r
@ fl00r我知道它是无效的。我有一个有四个字符串的数组,我想转换它们,所以我可以评估'if 2 <4',返回'true'。 – sscirrus
不知道if,但你可以做'2.send('<',4)'并且得到'true'。将这些变量包含在变量中,并且你在那里的一部分。尽管如何区分''2“'和'2',我不知道。 ''19'.send('<','2')'也是'true'。 –