parser

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

 

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

Не получается проверить через def существование суб-поля суб-объекта

Andrey 23.11.2014 04:38

Сабж.
Или лыжи не едут, или скорее второе.
Задача: через интроспекцию получаю хеш полей/объектов => конкретного объекта
листая хеш хочу "пнуть" произвольное поле/объект в цикле
на предмет существования у него суб-объекта/суб-поля
$Hash[ $.Nested_A[Alice] $.Nested_B[Bob]]
$Str[MyString]


^if(def $Hash.Nested_A){ True }{ False }
^if(def $Hash.Other){ True }{ False }
# На этой строчке выпадаю в Unhandled Exeption: string method not found
^if(def $Str.Some){ True }{ False }
Как бы с одной стороны понятно, что я прошу "суб-поле" объекта класса string который таковых не имеет,
и вообще ссылается что такого "$метода" у него нет.

А с другой стороны, я делаю интроспекцию объекта и получаю пачку его суб-объектов
и хотел бы знать наличие у них определенного поля def-ом

детектить по классу совсем не хочется, т.к. не только hash но и произвольный пользовательский класс
может иметь суб-поле, стало быть перебирать и сопоставлять сначала

$object.CLASS_NAME и только потом попробовать сделать def... как то очень нерадостно

другой вариант, прогонять потом отдельно каждое поле объекта
через ^reflection:fields[$subobject]
чтобы уже там в именах отыскать существование или не_существование поля/объекта.

Массовый перебор кучи только чтобы понять что объекта/поля/перменной нет...

Как это сделать красивее, и можно ли?