2014-12-03 2 views
2

Я пытаюсь расширить интерпретатор, который я нашел в Интернете. Интерпретатор принимает число как единственный аргумент и возвращает его как строку (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> элемента, я бы не столько неприятностей (как по умолчанию будет строка для начала), увы, это не так.

+0

Нам нужно увидеть код: интерпретатор (возможно, только часть, показывающая проблему) и ваши расширения к нему. В противном случае мы просто догадываемся над тем, что вы, возможно, сможете сделать, чтобы решить свою проблему. –

+0

Предположим, что они передают вам 'some_variable' или' Math.sqrt (4) '. Что должно произойти? – user2357112

+0

@ user2357112 Если some_variable - это строка, мой текущий код вернет «не число»; Math.sqrt (4) возвращает «два». –

ответ

2

Нет другого способа, кроме передачи строки функции, поскольку все аргументы должны быть оценены до того, как вызов функции может быть выполнен. Почему вы считаете, что ожидать ввода строки плохо? Если значение получено из поля ввода HTML, оно всегда будет строкой, если оно не будет явно оценено.

+0

Это вещь - это не элемент ''. И передать его в виде строки означало бы больше набрав для пользователя (не совсем уверен, что-то плохое это, хотя). –

+1

Итак, пользователь в этом случае программист, не так ли? Программист должен знать, что вызов функции вызовет сначала все аргументы. Это базовая концепция, применяемая большинством языков сценариев и программирования. Действительно ли это так много, чтобы внести вклад между двумя кавычками? –

+0

Полученные очки .. спасибо! –

Смежные вопросы