parser

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

 

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

^hash.sort[key;value]{string-key-maker}[[asc|desc]] — вылезла несовместимость

Sumo 10.11.2015 14:30 / 10.11.2015 14:36

У меня в некоторых местах встречается такая конструкция:
@getEntities[aOptions]
  $aOptions[^hash::create[$aOptions]]
  ^sql::table{
    select * 
      from entities
    order by ^switch[$aOptions]{
         ^case[DEFAULT]{id}
     }
  }
Сейчас я огребаю ошибку, если в хеше не задано поле sort:
switch
is 'junction', it does not have numerical (double) value

Это логично, но не очень удобно, поскольку sort слово частотное. Обойти через hash.contains можно, но совместимость уже поломана. Варианты исправления вижу такие:
— Переименовать метод в _sort.
— Сделать в hash.fields доступ только к данным, т.е. положить туда не ссылку на хеш, а объектик, который возвращает значения полей, даже если у нас есть одноименные методы.
— При обращении к $hash.method_name возвращать не ссылку на функцию, а void, если поля нет. Чтобы получить ссылку на методы обращаемся к $hash._method_name.

Последний варант мне кажется наиболее удачным, но я не знаю насколько эффективно это можно реализовать.

p.s. Вылезло в редкоиспользуемых местах, поскольку у меня почти везде ключ для сортировки называется order. Но наверняка у многих именно sort. Опять же $form:fields.sort навернякак часто встречается.