Кроме того, как только появится расписание на постоянной пересылке case
, что могло бы стать другим моментом для меня? case
вместо cond
condp
?Case case in Clojure
ответ
- Предполагая, что вы действительно имеете дело с константами времени компиляции,
case
семантически передает характер вашего состояния лучше, чемcond
илиcondp
. case
более краткий, чемcond
илиcondp
.
Пример:
(cond
(= foo 1) :one
(= foo 2) :two
(= foo 3) :three)
(condp = foo
1 :one
2 :two
3 :three)
(case foo
1 :one
2 :two
3 :three)
Я не могу комментировать какие-либо аспекты производительности, но, как всегда, это должно быть как минимум из ваших соображений.
Даже там, где это медленнее, case
часто более выразительным, чем if
:
(defn fact [n]
(case n
0 1
(* n (fact (dec n)))))
... читает лучше, чем
(defn fact [n]
(if (zero? n) 1
(* n (fact (dec n)))))
Это дело вкуса, но case
фраза одна форма короче.
очень приятный 'факт'! кстати, что вы имеете в виду более выразительно? это краткость форм и элегантности для глаз, основные отличия от тех форм, которые менее красивы? и из вашего факта я могу сказать, что только форма оценивается в 'case' является последней формой * по умолчанию *? – amirteymuri
@AmirTeymuri Да и нет. На первый взгляд, элегантность способствует пониманию по определению, я думаю. Во второй точке алгоритм является правильно рекурсивным, поэтому медленным и ограниченным до ~ 10K. И он взрывается переполнением стека задолго до этого: в 21 (замените '*' на '* '', чтобы вылечить это). Форма по умолчанию оценивается при каждом вызове, но самая глубокая. Отрицательные или нулевые аргументы также переполняют стек. Так что это довольно дрянной алгоритм, просто для иллюстрации. – Thumbnail
@ Thumbnail Действительно; Я бы, вероятно, использовал его как '(apply * '(диапазон 1 (inc n))). –
- 1. case case in sql?
- 2. case case with in
- 3. case case in select in jpql
- 4. case in select case in mysql
- 5. case case in select query in sql
- 6. case case with wildcard in where where
- 7. Oracle case case case
- 8. switch case in XSL
- 9. ELSE in CASE WHEN
- 10. Case in inested select
- 11. case in oracle procedure
- 12. Case in Lambda Expression
- 13. Case in-sensitive dictionary
- 14. Case Classes In Scala
- 15. Where/Case/IN logic
- 16. CASE in Aggregate Functions
- 17. CASE .. THEN in Postgresql
- 18. case statement in bash
- 19. Mysql join in case
- 20. case case не оценен
- 21. T-SQL where case case case
- 22. Ruby: case case
- 23. Рефакторинг оператора case case
- 24. case case в строке
- 25. умножение case case mysql
- 26. Значение, разделенное запятой SQL в IN, условие case case error
- 27. while и if condition in case case t-sql
- 28. Использование CASE внутри WHERE IN.
- 29. Case when in where where
- 30. Oracle: Case in Where where
+1 +1 вопрос. В моем сценарии, где задействовано большое количество сравнения строк, я нашел, что использование 'condp' значительно быстрее, чем использование' case', что не имеет смысла. Однако я подозреваю, что это связано с флагами оптимизации. – Davyzhu
@ Дайжу Интересно. Сколько случаев у вас было в ваших условиях (состояниях)? –
@Elogent Я тестировал с профилированием уровня инструмента, а количество условий варьировалось от 3 до 10. Все они, даже в случае с 10 ветвями, 'condp' работают лучше, чем' case'. – Davyzhu