|
|
|
|
|
by didibus
1782 days ago
|
|
That blog is talking about refactoring a method, not a function. In Clojure, I'm talking about renaming a function, which can be done without types. See the difference is that with a method: x.f() You have to know the type of `x` to find the right `f`, but with a function in Clojure: (ns foo
(:require [a :refer [f]]))
(f x)
The location of `f` is not dependent on the type of `x`, you known statically that this `f` is inside the namespace `a`, because of the require clause that says that in `foo`, `f` refers to the `f` inside of `a`.And this is unambiguous in Clojure because there cannot be more than one `f` inside `a`. If you had two `f` this would be the code in Clojure: (ns a)
(defn f [] "I'm in a")
(ns b)
(defn f [] "I'm in b")
(ns foo
(:require [a :refer [f]]
[b :refer [f]
:rename {f bf}]))
(f x)
(bf x)
You're forced to rename the other f, and now it's clear statically again that `bf` is the `f` from `b` and `f` is the one from `a`, no need to know the type of `x` for it. |
|