gpt4 book ai didi

clojure - 为什么 Clojure 编译器不会因类型提示不正确而抛出错误?

转载 作者:行者123 更新时间:2023-12-02 18:41:59 25 4
gpt4 key购买 nike

假设:

  • 我知道类型提示是关于性能优化的,而不是类型检查。我正在尝试找出性能优化何时无效的问题。

假设我有以下代码:

(ns test.core)

(defrecord SquarePeg [width length])
(defrecord RoundHole [radius])

(def square-peg (SquarePeg. 5 50))

(defn insert-peg [^test.core.RoundHole peg]
(println "insert-peg inserted with: " peg))

(defn -main
"Insert a square peg in a round hole"
[& args]
(insert-peg square-peg))

当我运行它时,我得到:

insert-peg inserted with:  #direct_linking_test.core.SquarePeg{:width 5, :length 50}

现在我希望这能某种表明类型提示是错误的,但事实并非如此。

现在我正在查看 Clojure Compiler code - 我看到以下提示处理代码:

但我没有看到它处理类型提示失败的部分。

我的问题是:为什么 Clojure 编译器不会因类型提示不正确而抛出错误?

最佳答案

类型提示大多[1]只影响原本使用反射的代码——即互操作代码。

由于您的 insert-peg 函数不执行任何互操作,因此类型提示没有用处,并且会被忽略。

当您的类型提示导致 clojure 编译器编写字节码来调用一种类型的方法,但在运行时该实例结果是另一种类型时,就会发生类型错误。

[1] 请参阅下面 Alex 评论中的异常

关于clojure - 为什么 Clojure 编译器不会因类型提示不正确而抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34963349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com