Оператор, перегружающийся в Clojure

теоретически возможно сделать то, что Вы хотите путем использования в своих интересах формата файла Портативного исполняемого файла (PE) для получения тип переменных и смещений, но я столкнулся [документация] со стеной, пытающейся сделать это несколько лет назад.Удачи!

16
задан Ryan Delucchi 8 October 2009 в 01:39
поделиться

2 ответа

Операторы Clojure (как и любой Lisp) являются простыми функциями; вы можете определить «оператор» как функцию:

(defn ** [x y] (Math/pow x y))

Оператор «+» (и некоторые другие математические операторы) - это особый случай в Clojure, поскольку он встроен (по крайней мере, для двоичного случая). Вы можете до некоторой степени избежать этого, не ссылаясь на clojure.core (или исключая clojure.core / + ) в вашем пространстве имен, но это может быть очень сложно.

Чтобы создать пространство имен, в котором переопределяется +:

(ns my-ns
  (:refer-clojure :exclude [+]))

(defn + [x y] (println x y))

(+ "look" "ma")

Хорошей стратегией, вероятно, было бы сделать ваш + мультиметодом и вызвать функцию ядра + для числовых случаев.

24
ответ дан 30 November 2019 в 17:53
поделиться

Взгляните на это: http://clojure.org/multimethods

Некоторые функции, такие как +, являются основными и не могут быть переопределены.

Вы можете создать новую функцию и называть ее, например, «. +» Или «! +» , который аналогичен с точки зрения удобочитаемости.

Используя информацию в указанном выше URL-адресе для нескольких методов, вы можете создать функцию, которая сообщает вашему. +, какую реализацию использовать.

6
ответ дан 30 November 2019 в 17:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: