Как получить доступ к переменным по переменной? (То есть переменные переменные?)

Может ли Arduino обрабатывать переменные переменные?

function getLetterCode(char input) {
    int letter_a = 17;
    int letter_b = 42;
    int letter_c = 50;
    return letter_$$input$$; //pseudocode
}

Это просто урезанный код, чтобы продемонстрировать мой вопрос. Я знаю о массивах, структуре переключателей и других обходных путях, но для моих конкретных нужд переменные переменные сэкономили бы тонны ввода.

, 👍0

Обсуждение

это было бы ограничено, но вы могли бы попробовать использовать массив с индексом char, который в основном представляет собой байт... letter['a'], @jsotola


1 ответ


Лучший ответ:

3

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

Вместо этого вам нужно либо хранить переменные в простом массиве и обращаться к ним по индексу, либо создать массив пар "ключ/значение" (проще всего использовать массив 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