Вызов по тексту — это когда аргументы функции не оцениваются до того, как они будут переданы, а затем заменяются экземплярами параметров. Аргументы передаются «как текст» и, следовательно, могут вызвать проблемы, если локальная граница функции использует те же имена переменных за пределами области видимости.
int i = 0;
void f(int j) {
print(j); // is replaced with print(i + 5) and prints 5
int i = 20;
print(j); // is replaced with print(i + 5) and prints 25
}
f(i + 5); // passes the unevaluated expression i + 5
Вызов по имени похож на то, что аргументы функции не оцениваются до того, как они будут переданы, а затем заменяются экземплярами параметров. Однако параметры привязаны к переходникам, которые действуют как замыкание для переменных в области действия вызывающей функции.
void f(int j) {
print(j); // prints 5
print(j); // prints 10
}
int i = 0;
f(i + 5); // passes the unevaluated expression i + 5
Дополнительную информацию можно найти здесь: http://www.cs.sjsu.edu/~pearce/modules/projects/Jedi/params/index.htm
person
Andrew Deniszczyc
schedule
23.05.2017