|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/400 08 Apr 2005 11:46:02 To : Bulat Ziganshin Subject : Re: perl syntax -------------------------------------------------------------------------------- Bulat Ziganshin -> Artem Chuprina @ Thu, 07 Apr 2005 18:33:37 +0400: BZ>>> первое очень просто - x.values, второе - x.values[0]+x.values[1], BZ>>> в общем виде - x.values.inject { |sum,a| sum+a } AC>> А вот тут синтаксиса не понял... То есть понял, что x.values подается AC>> на вход некоторой функции. Hе понял синтаксиса функции... Или inject AC>> - это подача на вход именно аккумулятору? Тогда синтаксис чуть AC>> понятнее, но все равно странноватый... BZ> x.inject f BZ> примерно соответствует коду: BZ> y = x[0] BZ> y = f(y,x[1]) BZ> y = f(y,x[2]) BZ> ... BZ> return y BZ> т.е. вышеприведённое выражение - самое банальное суммирование элементов BZ> x.values. в фигурных скобках записана closure Ага, то есть и аккумулятор inject делает сам, а переданная функция - один его шаг. Тогда понятно. AC>> Синтаксис функция-аргументы, а не объект-метод-аргументы, как здесь, AC>> надеюсь, бывает? А то там может быть две переменных - x и y... BZ> и да, и нет. на глобальном уровне можно объявить функции, можно с BZ> ними работать как с функциями, но на самом деле они будут объявлены BZ> как методы класса Object (корня иерархии классов) и будут получать BZ> аргумент self, просто никак его не используя. в общем, ruby успешно BZ> делает вид, что в нём есть функции, хотя на самом деле есть только BZ> методы классов :) То есть, если надо проделать такое слияние с двумя (и более) переменными, надо написать что-то вроде [x,y].inject { |sum,h| sum + h.values.inject { |sum,a| sum+a } } ? -- Artem Chuprina RFC2822: <ran{}ran.pp.ru> Jabber: ran@jabber.ran.pp.ru If it's there and you can see it---it's real If it's not there and you can see it---it's virtual If it's there and you can't see it---it's transparent If it's not there and you can't see it---you erased it! IBM poster explaining virtual memory, circa 1978 --- ifmail v.2.15dev5.3 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/34260a38bb49e.html, оценка из 5, голосов 10
|