Вы можете добиться того, чего хотите, используя пользовательскую функцию :
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
use Doctrine\ORM\Query\Lexer;
use Doctrine\ORM\Query\SqlWalker;
use Doctrine\ORM\Query\Parser;
class DateFunction extends FunctionNode
{
private $arg;
public function getSql(SqlWalker $sqlWalker)
{
return sprintf('DATE(%s)', $this->arg->dispatch($sqlWalker));
}
public function parse(Parser $parser)
{
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->arg = $parser->ArithmeticPrimary();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
}
Затем зарегистрируйте эту функцию в своем коде:
$em->getConfiguration()->addCustomDatetimeFunction('DATE', 'DateFunction');
И ваш DQL-запрос будет работать!
C #
C++
Относительно C #:
Python:
1) Это язык сценариев, а не полностью скомпилированный (я бы предпочел иметь возможность компилировать двоичные файлы - меня не волнует байт-код). Это очень раздражает, если мне приходится использовать очень много библиотек (то есть каждый, кто использует мою программу, должен установить все библиотеки, а это в основном означает, что ни один нормальный человек не сможет или не наберется терпения, чтобы правильно настроить его - если только Я делаю кучу ненужной работы). Я знаю способы создания двоичных файлов, но они не всегда работают, и я предполагаю, что они так или иначе объединяют интерпретатор в двоичные файлы (а я этого не хочу). Теперь, если бы я мог получить компилятор байт-кода, который бы включал копии всех файлов, которые я импортировал (и только те), для помещения в папку моей программы, это может быть подходящим компромиссом (тогда никому не придется загружать дополнительные библиотеки и тому подобное). Также было бы неплохо, если бы скомпилированные файлы python можно было бы сжать в один файл с одним, указанным в качестве файла для запуска программы, прежде чем это будет сделано.
2) Иногда это кажется немного ошибочным; было несколько раз, когда код, который должен был работать, просто не работал (не было ошибок программиста), особенно код, относящийся, например, «from moduleX import *» и другие проблемы, связанные с импортом, а также некоторые проблемы, относящиеся к к глобальным и локальным переменным.
3) Максимальная глубина рекурсии может быть больше. Был по крайней мере один раз, когда я почувствовал, что мне нужно подняться выше.
4) Нет оператора переключения (не говоря уже о том, что позволяет использовать числа,
5. Оператор объединения с нулем
?? оператор позволяет вам писать:
x = y ?? z;
вместо:
x = (y == null) ? y : z;
Мне нравится этот оператор, но я хочу другой:
x = y ??? y.foo() : z.foo();
вместо
x = (y == null) ? y.foo() : z.foo();
Я использую такие вещи все время, и меня раздражает то, что введите часть == null
.
4. У Equals должна быть лучшая поддержка
Мне приходится начинать каждый метод Equals (object obj)
с:
MyClass other = obj as MyClass;
if (other == null) return false;
Вам нужно только написать:
public override bool Equals(MyClass other) {...}
И язык должен позаботиться о предоставлении метода Equals (object obj)
.
ПРИМЕЧАНИЕ: должно быть гарантировано, что other не будет нулевым.
3. Невозможно использовать тернарный оператор с разными типами
Это не компилируется, и я думаю, что следует!
string foo = "hello";
int bar = 4;
object baz = foo == null ? foo : bar;
2. Отсутствие частного пространства имен
Мне нравится внутренняя
защита, но я бы хотел, чтобы была защита, которая разрешала бы доступ только из того же точного пространства имен. Это было бы неплохо для лучшего контроля доступа к большим библиотекам классов.
1. Нет множественного наследования
Я действительно использую наследование реализации (класса) только для реализаций интерфейса по умолчанию, но бывает много раз, когда я хочу сделать именно это.
vb.net
по ошибке
Ключевые слова Ключевые слова Ключевые слова и все пространство имен VB6 Python
Те, которые я просто не понимаю ...
math.ceil ()
и math.floor ()
возвращают числа с плавающей запятой, а не целые числа (возможно, чтобы избежать целочисленного переполнения в базовой функции C - но почему бы не преобразовать в Python long?) len ()
- это функция, а не метод reload ()
очень ограничен, не перезагружает модуль 9 раз из 10, только перезагружает импортированную метку, если это модуль, то есть не может выполнить из bar import foo; reload (foo)
, если foo не является модулем Те, которые имеют смысл в зависимости от реализации, но раздражают ...
array.sort ()
не возвращает массив (я полагаю, это происходит на месте) for
, верно?) и пара, которая зафиксирована в Python 3
global
] может относиться только к пространству имен верхнего уровня JavaFX
Lua
Я только что обнаружил, что не могу использовать Enum в качестве ограничения типа при создании универсального метода в C #.
У Microsoft есть достаточно хорошее объяснение, почему, но все же. Я сумасшедший
public static T MyFunc<T>(string arg) where T:Enum //wont work :(
a: = 3
, у вас есть сказать поместить 3 в
itemDelimiter
и экранируете их вручную. также можно получить строки и слова вроде получить слово 2 из строки 5 текстового файла
В стороне, я думаю, что одна из самых крутых функций, уникальных для HyperTalk, - это специальная переменная it
:
ask "How many years old are you?"
answer "You are " & it*12 & " months old."
C #
Item o ()
(с автоматическим удалением, если он есть). Python
path
, позволяющий исправить это, был отклонен. ( [f вместо f в os.listdir ('/ file / path'), если os.path.isfile (os.path.join ('/ file / path', f))]
)
То, что я ненавижу в Python :
То, что меня раздражает в Python:
(self,
private
goto
foreach $ arr => & $ val
... foreach $ arr => $ val
) Python:
Object Pascal:
Это всего лишь язык, жалкое подобие стандартной библиотеки и шаткая IDE заслуживают собственных списков.
JavaScript
Из спецификации ECMAScript 5:
7.6.1.2 Будущие зарезервированные слова:
class, enum, extends, super, const, export, import
В строгом режиме: реализует, let, private, public, interface, package, protected, static, yield
Хорошо, мне нравится последний вариант, но он сбивает с толку 7 видов
list.empty?
лучше, чем list.is_empty
или даже len (list)! = 0
. Аналогично process.kill!
было бы лучше, чем process.kill
. Ruby и lisp поняли это правильно. dict.items
или dict.items ()
? Руби тоже правильно поняла. Objective-C 2.0
Строго придерживаться языка и среды выполнения, а не библиотек, и ни в каких конкретный заказ:
У меня есть только один, но я считаю, что им стоит поделиться.
CSharp / .NET
У нас есть свойство Length для получения количества элементов в массиве и свойство Count для получения количества элементов в коллекции. Это выглядит более странно, если учесть тот факт, что CLR автоматически добавляет IList, ICollection, IEnumerable к нулевым одноразмерным массивам за сценой.
Я полагаю, что команда CLR и команда BCL имели трудные времена, обсуждая эту тему ;)
.Рубин.
C # 4.0
Ключевое слово "dynamic", готовое к злоупотреблениям. Если вы хотите / вам нужно использовать Reflection, используйте и сделайте очевидным, что вы его используете, не пытайтесь замаскировать его динамическими.
Python:
Нет стандартного набора инструментов GUI (сообщество ходит вокруг да около, но, похоже, так ни к чему и не пришло).
Эволюция инструментов и методов распространения и установки приложений и библиотек Python была, ну, скалистой. (Хотя в последнее время это, кажется, приближается к исправлению).
CPython все еще медленный как интерпретатор (хотя PyPy выглядит довольно хорошо в эти дни, если он станет "стандартным" Python, эта проблема исчезнет).
Вы не можете подклассифицировать встроенные классы (например, list и dict) без переопределения множества методов, даже если все, что вы хотите сделать - это простое подключение к событию (например, чтобы подключить элемент, добавляемый в список или удаляемый из него, вам нужно переопределить delitem, append, extend, insert, pop и remove - нет ни подклассифицируемого уведомления о событии "change", ни "protected" методов, которые бы отменяли общий код, используемый всеми вышеперечисленными методами).
Пока не был изобретен virtualenv, держать на одной машине отдельные среды Python для разных целей было настоящим мучением.
Python:
1) синтаксис продолжения строки: «... \» работает, а «... \» - нет, и это конечное пространство обычно невидимо, без необычных eol -маркировка редактором.
2) простое «повышение» невидимо в трассировке стека, поскольку трассировка стека выглядит как предыдущее возбужденное исключение.
3) медленный
4) плохая интеграция с веб-серверами (mod_python: dead, mod_wsgi: ограниченный объем работы). Это усложняется 3], требующим демонизации или некоторого вида сохранения памяти для правильной работы.
5) чрезмерная терпимость к смешанным табуляциям и пробелам, позволяющая иногда скрывать изменения в потоке управления. (возможно, исправлено в последних версиях)
Java:
Никогда не имеет собственных идей (все заимствовано).
Жаден до огромных наборов данных.
Использует Java, но так и не узнал, что такое объект.
Похищает Perl, но скрывает его на этапе обработки данных.
Врать всегда со статистиками!