|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/400 07 Apr 2005 15:41:58 To : Bulat Ziganshin Subject : Re: perl syntax -------------------------------------------------------------------------------- Bulat Ziganshin -> Artem Chuprina @ Wed, 06 Apr 2005 19:52:27 +0400: BZ>>> x = { "a" => [1, 2, {"b"=>nil}] } BZ>>> затем передать эту переменную в процедуру или наоборот - BZ>>> возвратить её. доступ ко всем элементам и их изменение BZ>>> прозводится напрямую: BZ>>> x["c"] = x["a"][2]["b"] BZ>>> x["a"][3] = x["a"][2].keys AC>> x = {"a" => [1,2], "b"=>[3,4]} BZ> наверно, нужно дополнительное разъяснение. в ruby все значения BZ> представлены ссылками, при этом все манипуляции с этими ссылками BZ> производятся неявно. скажем, в твоём примере x указывает на BZ> значение типа Hash. в этом хеше есть 4 ссылки - на строки "a" и BZ> "b", массивы [1,2] и [3,4]. x["a"] возвращает ссылку на первый BZ> массив. её можно передать в процедуру, присвоить переменной, BZ> возвратить и т.д. присваивание элементу массива или хеша вызывает BZ> процедуру "[]=", которой передаются сам массив/хеш, индекс/ключ и BZ> присваиваемое значение. например, x["a"] = [5,6] вызывет порцедуру BZ> x.[]= ("a", [5,6]) которая изменит ссылку, хранящуюся в первом BZ> элементе этого хеша Это как раз я из кода понял. То есть варианты возможны, но это - самое естественное решение. AC>> С этим, в общем, согласен. Один вопрос. Предположим, у меня AC>> x = {"a" => [1,2], "b"=>[3,4]} AC>> Каким выражением (statement не интересует, нужно именно выражение) я AC>> могу получить из этого [[1,2],[3,4]] и [1,2,3,4]? BZ> первое очень просто - x.values, второе - x.values[0]+x.values[1], а То есть явная операция слияния вместо неявной, как в перле. С учетом наличия общего вида (в перле, впрочем, при этом придется дополнить неявное слияние явным map) - тоже здраво. BZ> в общем виде - x.values.inject { |sum,a| sum+a } А вот тут синтаксиса не понял... То есть понял, что x.values подается на вход некоторой функции. Hе понял синтаксиса функции... Или inject - это подача на вход именно аккумулятору? Тогда синтаксис чуть понятнее, но все равно странноватый... Синтаксис функция-аргументы, а не объект-метод-аргументы, как здесь, надеюсь, бывает? А то там может быть две переменных - x и y... -- Artem Chuprina RFC2822: <ran{}ran.pp.ru> Jabber: ran@jabber.ran.pp.ru Praemonitus premunitus --- ifmail v.2.15dev5.3 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/25606857c9245.html, оценка из 5, голосов 10
|