parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Подскажите: не пойму, почему не работает конструкция с присвонием хеша (задача типа Свойств).

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