читали, читали...
Maxx 17.11.2007 16:09
/ 17.11.2007 16:43
но если там это и написано, то не значит, что понятно написано.
1. формулировка
вычисление параметра происходит при каждом обращении к нему внутри вызова метода
там указана практически дословно и для () и для {} - хотя это принципиально разные вещи (правда не всегда).
2. из того, что он вычисляется каждый раз и из формулировки метода inc (dec) - происходит очевидное противоречие: хотя мы и можем к $i применять методы inc/dec - но фактически $i, если оно передано нам параметром - не изменяется.
3. круглые скобки, насколько я понимаю - это единственный способ передать методу число, как число, а не как строку или junction. Поэтому, если мы хотим к передаваемому параметру внутри метода применять inc/dec - то необходимо вызывать метод ^method(value).
Исходя из этого, непонятно как же быть?
Например у нас есть метод, возвращающий следующее число после переданного. Задача искусственная, только для примера, понятно что ф-ция может быть сложнее.
@func[i]
$result[^i.inc[]]
@main[]
$value(1)
^func($value)
Как она работает, если верить документации?
принимаем параметр i, "вычисляем инкремент при обращении к i внутри метода" - и передаем в $result -> получаем 2.
Нифига - в $result вообще ничего не попадает, даже 1, а если написать $result(^i.inc[]) предполагая, что результат метода будет использован тоже как число (т.е. к нему тоже можно будет применить inc/dec) - то из метода вернется 0 (кстати, можете объяснить почему именно ноль??).
Вы считаете, что это очевидно после прочтения документации??? :)