Подскажите: не пойму, почему не работает конструкция с присвонием хеша (задача типа Свойств).
andylars 03.10.2015 21:47
/ 03.10.2015 22:13
Суть задачи:
хочу через методы класса изолировать/ограничить работу с неким хешем-окружением, дав
на создание/запись только доступную для этого часть/подструктуру (этого хеша).
В принципе тут даже не суть свойствами или методами, красивее оно уже все равно особо не станет из-за известной проблемы:
невозможность нативной трансляции объекта/пути_объекта obj.a.b, т.е. в параметр свойства
приходит просто строка с точками, поэтому видимо только process.
Но, где-то теряется объект, не пойму где.
При попытке присвоить значение получаю <void>
Для упрощения использую в примере просто методы:
@main[]
$MyObj[^MyClass::create[]]
^MyObj.getEnv[]
^MyObj.getEnv[a]
^MyObj.getEnv[b.1]
^MyObj.setEnv[c;$.1[c1]] ^rem{# получаю $_env.c со значнием <void>, вместо $_env.c.1[c1] }
@CLASS
MyClass
@create[]
$self._env[
$.a[
$.1[a1]
$.2[a2]
]
$.b[
$.1[b1]
$.2[b2]
]
]
@getEnv[_obj][locals]
$result[^process{^$self._env^if(def $_obj){.$_obj}}]
@setEnv[_obj;_value][locals]
^if(def $_obj){
^process{^$self._env.$_obj^[^$_value^]}
}
$result[]
UPD: Ага, прочитал... локальные переменные не доступны ^process
и как быть тогда? Ведь аргументы локальны всегда.Сделал костыль, вида:
@setEnv[_obj;_value][locals]
$self._set_env_value[$_value]
^if(def $_obj){
^process{^$self._env.$_obj^[^$self._set_env_value^]}
}
$result[]
теперь работает, но как то это всё странно, как на самом то деле это разруливается?
Хорошо если б еще и без process в обоих случаях (get/set)...
P.S.: Тут, конечно основная задач не в изоляции, а совершении попутных действий при присвоении, которые не описаны в примере, т.к. в действительности никакой изоляции это, конечно, не дает, ведь получив подструктуру через getEnv - получаешь не копию, а ссылку, а стало быть можно и назначить и удалить всё, что получено через result из get...
Равно как со свойством в данном случае, так и с методом, разницы нет.
А копию отдавать... как-то память и скорость жалко.
- Подскажите: не пойму, почему не работает конструкция с присвонием хеша (задача типа Свойств)., andylars 03.10.2015 21:47 / 03.10.2015 22:13