2012-07-28 2 views
8

내가 예를 들어, 다른 원시 타입과 래퍼 클래스 사이에 내 프로그램의 행위를 원하는 :프리미티브 유형에 멀티 메소드를 디스패치하는 방법은 무엇입니까?

(defmulti try-type class) 

(defmethod try-type Integer [arg] 
    (println "Integer")) 

(defmethod try-type Integer/TYPE [arg] 
    (println "int")) 

그러나 내가 정수를 시도하지만, 일을하고 그래서 모두

user=> (try-type (.intValue (int 2))) 
Integer 
nil 
user=> (try-type (int 2)) 
Integer 
nil 

을 int로하지 않습니다이며, 프리미티브 유형에 멀티 메소드를 디스패치 할 수 있습니까?

====== 편집 ======

제가 Clojure의 구글에 구아바 배치 하였다. Booleans, Dobules, Ints 등과 같은 기본 라이브러리가 있습니다. 공통적 인 몇 가지 메소드가 있으므로 다중 메소드를 사용하려고합니다.

+0

이유를 설명 할 수 있습니까? 현재 프리미티브에 파견 할 수는 없지만 동일한 목표 (Google XY 문제)를 달성하는 좋은 방법이있을 수 있습니다. – mikera

+0

@mikera가 편집되었습니다. – qiuxiafei

답변

4

아니요, 현재 불가능합니다. 함수 (multimethod 디스패치 함수와 같은)에 대한 arg는 Object (따라서 프리미티브는 boxed 될 것이다) 또는 long/double 프리미티브 (따라서 Object는 unboxed 될 것이다)이다. 시나리오에는 함수 내에서 그 구별을 유지할 수있는 함수가 필요합니다.

그렇다면 해결하려는 실제 문제가 무엇이든 해결책이 될 수 있습니다.

관련 문제