Какие (есть) языки только с передачей по ссылке? - PullRequest
4 голосов
/ 26 мая 2010

Мне было интересно. Существуют ли языки, которые используют only pass-by-reference в качестве стратегии eval?

Ответы [ 4 ]

6 голосов
/ 26 мая 2010

Я не знаю, что такое "стратегия eval", но вызовы подпрограммы Perl только для передачи по ссылке.

sub change {
    $_[0] = 10;
}

$x = 5;
change($x);
print $x;  # prints "10"
change(0);  # raises "Modification of a read-only value attempted" error
1 голос
/ 26 мая 2010

VB (pre .net), VBA & VBS по умолчанию - ByRef, хотя его можно переопределить при вызове / определении подпрограммы или функции.

0 голосов
/ 10 марта 2011

Фортран делает; хорошо, предшествуя таким понятиям, как передача по ссылке, вероятно, следует сказать, что он использует передачу по адресу; функция Фортрана, как:

INTEGER FUNCTION MULTIPLY_TWO_INTS(A, B)
INTEGER A, B
MULTIPLY_BY_TWO_INTS = A * B
RETURN

будет иметь прототип в стиле C:

extern int MULTIPLY_TWO_INTS(int *A, int *B);

и вы можете позвонить через что-то вроде:

int result, a = 1, b = 100;

result = MULTIPLY_TWO_INTS(&a, &b);

Другим примером являются языки, которые не знают аргументы функции как таковые, но используют стеки. Примером может служить Forth и его производные, где функция может изменять пространство переменных (стек) любым способом, каким хочет, изменяя существующие элементы, а также добавляя / удаляя элементы. «Комментарии к прототипу» в Forth обычно выглядят как

(argument list -- return value list)

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

0 голосов
/ 26 мая 2010

Как насчет Brainfuck?

...