Re: perl syntax
- From
- Artem Chuprina (2:5020/400)
- To
- Bulat Ziganshin (2:5054/37.63)
- Date
- 2005-04-07T15:41:58Z
- Area
- RU.PERL
From: Artem Chuprina <ran+news@ran.pp.ru>
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 подается
на вход некоторой функции. Не понял синтаксиса функции... Или 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)
SEEN-BY: 50/203 520 400/462 450/159 186 208 451/30 452/25 100 454/9 455/15
SEEN-BY: 461/33 43 74 106 132 640 464/34 465/204 467/24 469/125 999 478/44 65
SEEN-BY: 550/150 5068 4600/126 4614/9 4616/3 4623/56 4625/8 9 4626/100 4627/10
SEEN-BY: 4632/10 4635/4 99 1024 4641/444 4642/27 48 4657/50 5000/76 5001/50
SEEN-BY: 5001/5001 5002/76 5002 5003/34 5006/1 5007/1 5010/53 70 146 5011/13
SEEN-BY: 5012/8 5015/4 28 214 5019/5 5020/52 115 118 128 133 150 154 175 194
SEEN-BY: 5020/400 486 545 549 600 642 715 744 758 794 830 921 958 968 982 1057
SEEN-BY: 5020/1100 1169 1212 1234 1523 1604 1626 1642 1653 1665 1826 1829 1922
SEEN-BY: 5020/1930 2013 2020 2044 2142 2200 2238 2345 2590 2908 4400 4441
SEEN-BY: 5021/2 3 5022/128 5023/11 5024/1 73 5025/19 750 5026/14 49 5030/49 69
SEEN-BY: 5030/195 382 436 556 611 920 966 1016 1039 1063 1339 1520 1688 1900
SEEN-BY: 5031/7 47 63 70 5032/11 20 5033/21 35 5034/8 5035/3 38 63 5036/1 13
SEEN-BY: 5037/21 36 5038/4 5040/33 47 5041/4 5042/13 5045/7 42 5047/47 5049/1
SEEN-BY: 5049/6 157 5050/9 41 47 5051/15 35 5053/16 38 5054/1 8 9 35 36 37 45
SEEN-BY: 5054/50 66 67 81 85 5055/177 5056/16 5057/1 5058/77 5059/2 9 20
SEEN-BY: 5060/88 90 5061/15 5062/1 4 7 5063/41 51 5064/7 35 36 39 5066/18
SEEN-BY: 5070/26 66 948 1222 5071/22 5075/5 37 5077/70 80 5079/49 5080/80 1003
SEEN-BY: 5081/2 5082/6 5083/13 21 5090/23 105 108 113 5093/4 27 33 5096/18
SEEN-BY: 5100/113 6001/3 6023/1 6033/2727 6035/9 6070/5 6083/11 6096/10
PATH: 5020/400 4441 52 5054/1 37