欢迎!请参阅关于 页面以了解有关如何使用本站的一些更多信息。
评论者:richhickey
这将是一个破坏性的更改
即使 clojure.core/get 的初始设计可能是混乱的/错误的,现在改变也来不及了。这种改变不值得。这会破坏太多程序/库。现在我们能做的最好的事是创建一个 clojure.core/get2 或 my-lib.core/get 并赋予其这种行为。
clojure.core/get
clojure.core/get2
my-lib.core/get
此外,我无法说这个 get2 的行为比我们的 get 更好/正确。这只不过是针对 get 的另一套规则。如您所提议的,这套新规则,如何保证在未来的某一天,不会有人提出针对 get 的新一套规则?也许是 get3?您何时才能停下呢?
get2
get
get3
评论由:jafingerhut 发布
2013年5月24日发布的补丁文件 clj-1107-throw-on-get-for-unsupported-types-patch-v2.txt 与2012年11月13日发布的 0001-CLJ-1107-Throw-exception-for-get-called-on-unsupport.patch 相同,唯一区别是它可干净地应用于最新的 master 版本。最近的一次 CLJ-1099 提交将测试中许多 IllegalArgumentException 出现的情况改为 Throwable,这是此次更新补丁中唯一的变化。
补丁 clj-1107-throw-on-get-for-unsupported-types-patch-v2.txt 于2014年1月23日干净地应用到 Clojure 的最新 master 版本,但在2014年1月30日之间提交给 Clojure 的更改之后不再适用。我没有检查更新此补丁可能有多困难或容易。
评论由:stuart.sierra 发布
从 master 版本 5cc167a 创建了新的补丁 0003-CLJ-1107-Throw-exception-for-get-on-unsupported-type.patch。
2014年3月26日发布的补丁 clj-1107-throw-on-unsupported-get-v4.patch 与 Stuart Sierra 的补丁 0003-CLJ-1107-Throw-exception-for-get-on-unsupported-type.patch 相同,并保留了其作者。唯一的区别是增加了一行差异上下文,以便干净地应用于最新的 master 版本。
评论人:alexmiller
现在这可能是通过 "get" 上的规范来完成的。
我曾认为 (get m k) 等同于 (val (find m k)),但 m 不是关联时并非如此,这让我非常惊讶。
当 m 不是关联时,find 会抛出异常,但 get 只返回 nil。
我认为 get 也应该在第一个参数不是关联时抛出异常。对于非关联参数返回 nil 只会隐藏错误,我想不到任何有效的用例。