Как использовать строку из одной ячейки в качестве массива в функции без VBA

Включение некоторых концепций для будущих посетителей:

В основном все сводится к тому, что компилятор должен иметь возможность детерминистически сказать, что тело выражения лямбда не работает на устаревшая копия переменных.

В случае локальных переменных компилятор не может быть уверен, что тело выражения лямбда не работает с устаревшей копией переменной, если только эта переменная не является окончательной или фактически окончательной, поэтому локальные переменные должны быть либо окончательными или эффективно final.

Теперь, в случае полей экземпляра, когда вы обращаетесь к полю экземпляра внутри выражения лямбда, тогда компилятор добавит this к этому доступу к переменной (если вы не сделали это явно) и поскольку this является фактически окончательным, поэтому компилятор уверен, что тело выражения лямбда всегда будет иметь последнюю копию переменной (обратите внимание, что многопоточность выходит за рамки области сейчас для этого обсуждения). Итак, в случае полей экземпляра компилятор может сказать, что тело лямбда имеет последнюю копию переменной экземпляра, поэтому переменные экземпляра не обязательно должны быть окончательными или фактически окончательными. Пожалуйста, см. Снимок экрана с помощью слайда Oracle:

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

0
задан Matthias Tidlund 16 January 2019 в 15:54
поделиться