Я пытаюсь расширить интерпретатор, который я нашел в Интернете. Интерпретатор принимает число как единственный аргумент и возвращает его как строку (1 -> one, 2.3 -> two point three...
и т. Д.). Я расширил свой «язык» таким образом, что он включает имена операторов (например, «TIMES» и «PLUS»).Возьмите несколько аргументов и сохраните его форму?
Теперь вот моя проблема. Чтобы эти операторы могли удержаться, единственный способ, который я счел разумным включать, - это вместо того, чтобы передавать аргумент как число, передать его как строку. Например, если бы я должен был передать 3*5-23.2
функции, я бы хотел, чтобы он возвращал three TIMES five MINUS twenty three point two
. Вместо этого я получаю negative eight point two
, что является оцененной формой прежнего аргумента.
Есть ли способ манипулировать аргументом, чтобы он стал строкой перед ее оценкой? Или я должен прибегнуть к тому, чтобы заставить пользователя вводить строку (и это плохо?)?
Edit 1
Мой код консольный один; пользователь обращается к нему так:
> wordify(34)
"thirty four"
> wordify(3.4)
"three point four"
> wordify(Math.PI)
"three point one four one five nine two six..." // omitted for convenience
Если бы это было быть захвачено из <input>
элемента, я бы не столько неприятностей (как по умолчанию будет строка для начала), увы, это не так.
Нам нужно увидеть код: интерпретатор (возможно, только часть, показывающая проблему) и ваши расширения к нему. В противном случае мы просто догадываемся над тем, что вы, возможно, сможете сделать, чтобы решить свою проблему. –
Предположим, что они передают вам 'some_variable' или' Math.sqrt (4) '. Что должно произойти? – user2357112
@ user2357112 Если some_variable - это строка, мой текущий код вернет «не число»; Math.sqrt (4) возвращает «два». –