Suggestion :
move and generalize the problem by creating an as-file multifn that may take
String, File , and maybe other things later ...
(defmulti as-file type)
(defmethod as-file String [from] (File. from))
(defmethod as-file File [from] from)
(defn mv [from to]
(let [ [from to] (map as-file [from to]) ]
(println "transformed to file"))
cheers,
--
laurent
2009/10/8 Robert Stehwien <[email protected]>
> Here is another question on when you would use a multi-method. I want the
> mv function to accept a java.io.File or a String for either of the two
> parameters and here are the options I came up with:
>
> -----(defmulti mv (fn [from to] [(class from) (class to)]))
> (defmethod mv [String String] [from to] (println "Both strings"))
> (defmethod mv [File File] [from to] (println "Both files"))
> (defmethod mv [File String] [from to] (println "File String"))
> (defmethod mv [String File] [from to] (println "String File"))
>
> (defn mv2 [from to]
> (let [f (if (= (class from) File) from (File. from))
> t (if (= (class to) File) from (File. to))]
> (println "transformed to File")))
> -----
>
> While I find that multi-methods allowing me to do the above exceedingly
> cool, would it be more idomatic to just use the let and create a File if
> passed a String. Am I doing "too much work" for something relatively
> simple.
>
> The multi-method does have better (IMHO) errors when passed (mv ["foo"]
> "bar"):
> -----
> No method in multimethod 'mv' for dispatch value:
> [clojure.lang.LazilyPersistentVector java.lang.String]
> [Thrown class java.lang.IllegalArgumentException]
> -----
>
> This would tell me that I could write another multi-method that could move
> multiple files from different locations passed in as a sequence to one
> destination... which I didn't think I needed but could be pretty handy now
> that I think on it.
>
> --Robert
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---