Пример Вызова по имени

В моих принципах программирования класса мы говорим о различных вызывающих методах. Некоторые, которых мы обсудили, были:

  • вызов по значению
  • вызов по ссылке
  • вызов значением/результатом
  • и вызов по имени

Я не могу найти пример того, как вызов по имени работает. Кто-либо хочет дать мне пример? Я думаю, что, когда Вы берете XML-файл в качестве входа, это подобно вызову по имени. Кто-то мог дать мне более традиционный пример?

9
задан sixtyfootersdude 25 July 2010 в 21:43
поделиться

2 ответа

Я буду работать на гипотетическом языке программирования. Предположим, у нас есть функция 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.

Это надуманно, но я надеюсь, что вы поняли идею. Все дело в подстановке.

9
ответ дан 4 December 2019 в 15:11
поделиться

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(); }

3
ответ дан 4 December 2019 в 15:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: