Протоколы Clojure влияет? - PullRequest
       2

Протоколы Clojure влияет?

6 голосов
/ 10 сентября 2010

Повлияли ли на Clojure протоколы ObjectiveC? Если нет, то как они отличаются?

Ответы [ 2 ]

3 голосов
/ 10 сентября 2010

Вам могут понравиться эти статьи и ссылки:

2 голосов
/ 25 ноября 2011

Они имеют одно и то же имя, и понятия связаны между собой, однако протоколы Clojure носят более общий характер и предназначены для решения «проблемы выражения». Это видео очень интересно смотреть .

Протоколы Objective C больше похожи на интерфейсы Java / C # - они определяют набор методов, которые может реализовать конкретный класс. Однако вы должны предоставить эти методы в конкретном классе, что на практике обычно означает, что вы контролируете исходный код расширяемого класса.

Протоколы Clojure позволяют вам определять набор функций, которые расширяются для обработки любого класса полиморфным образом , и вы можете предоставлять реализации отдельно, даже если вы не контролируете класс, который вы расширяете.

Пример расширения протокола Clojure, например, на класс java.lang.String (которым вы определенно не управляете!), А также на специальное значение nil (т.е. нулевое значение):

;; define a protocol with one function
(defprotocol FooProtocol
  (foo [this]))

;; extend the protocol to String and nil
(extend-protocol FooProtocol 
  java.lang.String
    (foo [some-string] (str "Called foo on String: " some-string))
  nil
    (foo [_] "Called foo on nil value"))

(foo "hello")
=> "Called foo on String: hello"

(foo nil)
=> "Called foo on nil value"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...