Преобразование строки в условие в Ruby - PullRequest
4 голосов
/ 30 июня 2011

У меня действительно есть строка с именем "cond".Это содержимое этой строки:

"20 < 50"

Я хотел бы вставить ее в условие, подобное следующему: (пример)

if 20 < 50
return "Hello"

Но это условие является строкой, поэтому яне могу написать это:

if cond
return "Hello"

Так что я хотел бы знать, возможно ли преобразовать строку в условие, чтобы установить в условии "если".И если это возможно, как я могу это сделать?

Спасибо.

Ответы [ 3 ]

9 голосов
/ 30 июня 2011

eval может быть просто вашим другом здесь:

>> eval('20 < 50')
=> true

Однако eval выполнит произвольный код внутри своего аргумента; Вы должны быть уверены, что ваш cond не может содержать ничего, что может нанести вред здоровью вашей системы!

1 голос
/ 30 июня 2011

Если вы знаете, что условие всегда будет основным, как в приведенном вами примере, вы можете сделать это:

left, op, right = "20 < 50".split
cond = left.to_i.send(op.to_sym, right.to_i)
1 голос
/ 30 июня 2011

Одной из альтернатив использованию eval, возможно, является написание оценщика (или использование / изменение существующего, например, этого от Sterling Camden ).

Так как его код требует от вас писать lt, gt, eq и т. Д. Вместо <,>, ==, .... Как отмечено в комментарии в calc.rb:

# Equality and its clan (note we cannot use '==' or other two-character
# non-word operators, because of the way we parse the string.  Non-word
# characters come in one at a time.
...