sub factorial ($n) { [*] 1..$n }
Я почти не знаю о Perl6. Но я думаю, что этот [*]
оператор такой же, как у Хаскелла product
.
Этот код работает на мопсах и, возможно, попугаях (я не проверял.)
редактировать
Этот код также работает.
sub postfix: ($n) { [*] 1..$n }
# This function(?) call like below ... It looks like mathematical notation.
say 10!;
Что произойдет, если пользователь запустит 64-разрядную версию приложение сохраняет файл, в котором эти значения закодированы как двойники, а файл открывается / разархивируется в 32-битной системе?
Ничего особенного. Файл содержит двойной
, и предположительно вы ' повторно отправив decodeDouble: forKey:
для получения значения, поэтому вы получите double
. Затем вы можете преобразовать его в CGFloat
- который потеряет точность, если вы работаете на 32-битной машине, но вам рано или поздно придется выполнить это преобразование. (Даже если вы держите double
, вам все равно придется приводить к CGFloat
, когда вы передаете значение в Quartz / AppKit / UIKit.)
Рассмотрите альтернативу: Вы сохраняете float
в файле на 64-битной машине, а затем загружаете файл обратно на ту же машину. Вы и Quartz можете обрабатывать полную точность 64-битного типа double
, но у вас его нет, потому что вы выбросили его при записи файла. Если значение вообще изменилось при применении, это изменение теперь навсегда.
Поэтому я рекомендую всегда использовать тип double
с NSKeyedArchiver, если только вы не знаете, что никогда не собираетесь использовать что-либо, кроме float
(т. Е. целевой API использует только float
, никогда double
). Это не относится к Quartz, поэтому для CGFloat
используйте double
.