В моих принципах программирования класса мы говорим о различных вызывающих методах. Некоторые, которых мы обсудили, были:
Я не могу найти пример того, как вызов по имени работает. Кто-либо хочет дать мне пример? Я думаю, что, когда Вы берете XML-файл в качестве входа, это подобно вызову по имени. Кто-то мог дать мне более традиционный пример?
Я буду работать на гипотетическом языке программирования. Предположим, у нас есть функция p(x)
, которая выводит x, а затем возвращает его. Теперь определим функцию:
function foo(x, y) { return y+1; }
Теперь вызовем ее с некоторыми аргументами:
foo(p(123),p(456))
x
и y
будут заменены на параметры, так что вызов foo
выше приведет к:
return p(456)+1;
Итак, мы выведем на экран 456 и вернем 457. При другой стратегии оценки мы бы сначала оценили параметры функции (при этом выведя на экран 123 и 456), а затем заменили 456 на y
в теле функции, вернув в итоге 457.
Это надуманно, но я надеюсь, что вы поняли идею. Все дело в подстановке.
http://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_name
В вызове по значению вы оцениваете аргументы, получая значения, которые затем передаются в функцию.
foo(bar())
оценивается как arg = bar();
, затем вызывается foo(arg), и в теле функции эта вновь выделенная переменная arg становится доступной, изменяемой, ...
В вызове по имени вы заменяете в теле функции любые ссылки на аргументы их кодами, используемыми во время вызова. Затем, оценивая тело, вы оцениваете аргументы.
foo(bar())
с foo(arg) { return arg; }
будет оценено как foo(arg) { return bar(); }