Как получить доступ к переменным по переменной? (То есть переменные переменные?)
Может ли Arduino обрабатывать переменные переменные?
function getLetterCode(char input) {
int letter_a = 17;
int letter_b = 42;
int letter_c = 50;
return letter_$$input$$; //pseudocode
}
Это просто урезанный код, чтобы продемонстрировать мой вопрос. Я знаю о массивах, структуре переключателей и других обходных путях, но для моих конкретных нужд переменные переменные сэкономили бы тонны ввода.
@Zsolt Szilagy, 👍0
Обсуждение1 ответ
Лучший ответ:
Нет, так делать нельзя. Такие вещи возможны только в интерпретируемых языках, где имена переменных видны во время выполнения. В скомпилированных языках вы не можете видеть имена переменных (они больше не существуют), поэтому вы не можете получить к ним доступ по такому имени.
Вместо этого вам нужно либо хранить переменные в простом массиве и обращаться к ним по индексу, либо создать массив пар "ключ/значение" (проще всего использовать массив struct
) и повторите его в поисках правильного ключа, соответствующего вашему вводу. Или, если входных данных не слишком много, просто используйте переключатель
для выбора разных значений:
int getval(char input) {
switch (input) {
case 'a': return 17;
case 'b': return 42;
case 'c': return 50;
default: return 0;
}
}
Спасибо! Я просто понимаю, насколько я привык к этим языкам высокого уровня., @Zsolt Szilagy
Я знаю. Это даже не похоже на то, что вы можете использовать «Карту» в Arduino - STL серьезно не хватает ..., @Majenko
Порядок действий: вы также можете сделать это на скомпилированном языке с динамической диспетчеризацией (например, Smalltalk или Objective-C)., @Duncan C
@DuncanC Я не считаю их настоящими языками., @Majenko
@ Маженко, ну это глупо. Smalltalk является матерью всех объектно-ориентированных языков. Итак, Python — это настоящий язык, а Smalltalk — нет?, @Duncan C
Питон? Эта дымящаяся куча прогорклой барсучьей блевотины?!, @Majenko
- Как работают массивы?
- Как сбросить переменную непосредственно перед вводом функции?
- Функция управления сервоприводами
- Защита переменных и функций в библиотеке, не имеющей класса
- Как улучшить этот Код? (или как передать строку Char в функцию, чтобы она вела себя как переменная)
- Как объявить массив переменного размера (глобально)
- Как получить тип данных переменной?
- Преобразование long в массив символов и обратно
это было бы ограничено, но вы могли бы попробовать использовать массив с индексом char, который в основном представляет собой байт...
letter['a']
, @jsotola