欢迎!请在关于页面上了解有关此功能的一些更多信息。
评论者:richhickey
这将是一个破坏性的变化
即使最初的设计{{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主分支上干净应用,但自那时起至2014年1月30日在Clojure上做出的提交后不再如此。我尚未检查更新此补丁可能有多难或有多容易。
评论者:stuart.sierra
从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相同,并保留了其作者身份。差异之处仅有一行diff context,以便将其干净地应用到最新的master。
评论由:alexmiller 提出
现在可能也可以通过一个关于 "get" 的规范来完成。
我曾经认为 (get m k) 等价于 (val (find m k)),但是当 m 不是关联性时并非如此,这让我非常惊讶。
当 m 不是关联性时,find 会抛出异常,但 get 只返回 nil。
我认为当第一个参数不是关联性时,get 也应该抛出异常。在非关联参数上返回 nil 只会掩饰错误,我想不出任何有效的用途。