вызова по тексту, где аргументы функции не оцениваются, прежде чем они передаются, а затем заменить экземпляры параметров. Аргументы передаются «как текст» и поэтому могут вызывать проблемы, если локальная граница функции использует те же имена переменных вне области видимости.
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
Вызов по имени схож в том, что аргументы функции не оценены, прежде чем они передаются, а затем заменить экземпляры параметров. Тем не менее, параметры привязаны к thunks, которые действуют как замыкание переменных в объеме вызывающей функции.
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
Вы должны добавить больше контекста. В отличие от вас, никто из нас не взял этот класс. Честно говоря, это, по-видимому, простая неправильная терминология, которую изобрел ленивый лектор. Предполагая, что это о C, тогда на языке действительно есть только 1 и 2, а 3 - не механизм, а шаблон проектирования, 4 - не передача параметров, а 5 - это нечто совершенно другое. –
Я сам не посещал этот класс. Я прошел через эту ссылку, ища ответ на мой вопрос. Хотя последние два не используются в настоящей реализации передачи параметров на любом языке, я просто хочу пояснить разницу, теоретически, или некоторым примером типа псевдокода. – Deepaank