наткнулся на следующее неудобство, имееющее место быть при текущем положении вещей
Misha v.3 25.01.2007 14:09
/ 25.01.2007 14:21
[в новой версии sql классов]
1. есть глобальный ключик $.bCacheAuto "кешировать запросы автоматически", который я могу указать конструктору sql объекта. соотв. ключ имеет 2 значения: true|false (или 1|0). при его задании он копируется в переменную объекта: $self.bCacheAuto($hParam.bCacheAuto)
2. у любого sql запроса я могу пожелать отключить кеширование. мне кажется логичным добавить примерно аналогичный ключик с примерно аналогичными значениями. при этом если при создании объекта я указал $.bCacheAuto(false) [т.е. я не хочу автоматически кешировать всё], то указав $.bCacheAuto(true) _у_запроса_ я включу авто-кеширование этого запроса, а если при создании объекта я указал $.bCacheAuto(true) [т.е. я хочу кешировать все по умолчанию], то указав $.bCacheAuto(false) _у_запроса_ я хочу отключить кеширование у этого конкретного запроса.
в результате получается, что я не могу легко и просто отличить был-ли задан у запроса $.bCacheAuto(false) или этот ключ вообще не был указан, т.к. и ^if(def $hParam.bCacheAuto){}{} и ^if($hParam.bCacheAuto){}{} возвращают false в обоих случаях.
получается, что в моем случае приходится вместо понятного кода, работающего в случае задания значений и в виде bool и в виде int:
^if(
$hParam.bCacheAuto
|| (
$self.bCacheAuto
&& !def $hParam.bCacheAuto
)
){авто-кешируем}
писать такое извращение (да, я считаю это извращением включающее в себя сравнение строк):
^if(
$hParam.bCacheAuto
|| (
$self.bCacheAuto
&& !($hParam.bCacheAuto is "bool")
&& !($hParam.bCacheAuto is "int")
&& !($hParam.bCacheAuto is "double")
)
){авто-кешируем}
=> более общая формулировка: мы не можем использовать bool параметры и что-то включать значением false, т.к. сложно отличить ситуацию с явным значением false от ситуации с отсутствием параметра.
P.S. готов выслушать предложения по упрощению конструкции от всех, особенно от тех, кто голосовал за false == !def %-)
P.P.S. вариант изменения имени ключа в запросе, чтобы его действие было "инверсным", например на $.bForce, не предлагать, т.к. я считаю что один ключ с одним поведением запомнить проще и так делать правильнее.
P.P.P.S. мнение
ПАФ-а видел, результаты голосования тоже, но есть ощущение что после этих граблей текущее поведение def $bool я изменю %-)