协议中的提示返回类型在 Clojure 中是否有任何影响?

2024-06-24

您可以在协议中暗示返回类型

(defprotocol Individual
  (^Integer age [this]))

并且编译器将使您的方法符合:

(defrecord person []
  Individual
  (^String age [this] "one"))

; CompilerException java.lang.IllegalArgumentException: Mismatched return type: age, expected: java.lang.Object, had: java.lang.String, ...

但你不必遵守类型提示:

(defrecord person []
  Individual
  (age [this] "one"))

(age (new person))
; "one"

type-hint 有什么作用吗?


这是后续您可以在 clojure defrecord 中指定方法的返回类型吗? https://stackoverflow.com/questions/22954681/can-you-specify-the-return-type-of-a-method-in-a-clojure-defrecord


返回类型提示转到协议函数age作为标签。从那里,该标签用于本地类型推断。要观察这一点的实际情况:

- (.longValue (age (new person))) ClassCastException java.lang.String cannot be cast to java.lang.Integer net.bendlas.lintox/eval18038 (form-init4752901931682060526.clj:1) ;; longValue is a method of Integer, so a direct cast has been inserted

如果类型提示已关闭,或者如果您调用的方法不在提示类型上,则编译器会在反射器中插入一个(缓慢的)调用,而不是普通的强制转换:

- (.otherMethod (age (new person))) IllegalArgumentException No matching field found: otherMethod for class java.lang.String clojure.lang.Reflector.getInstanceField (Reflector.java:271)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

协议中的提示返回类型在 Clojure 中是否有任何影响? 的相关文章

  • Clojure:无法找到静态字段

    给出以下代码 map Integer parseInt 1 2 3 4 为什么除非我换行 否则会出现以下异常Integer parseInt在匿名函数中并手动调用它 Integer parseInt clojure lang Compile
  • 改进迭代文本解析的 clojure lazy-seq 使用

    我正在编写一个 Clojure 实现这次编码挑战 http biostar stackexchange com questions 1759 code golf mean length of fasta sequences 尝试找出 Fas
  • 从不带破折号的字符串创建 UUID

    如何从不带破折号的字符串创建 java util UUID 5231b533ba17478798a3f2df37de2aD7 gt uuid 5231b533 ba17 4787 98a3 f2df37de2aD7 tl dr java u
  • Clojure 中没有整数溢出?

    我在阅读时在 IntelliJ IDEA 中运行 Clojure 1 3 0 和 La ClojureClojure 的乐趣 在第 4 1 3 节 第 64 页 中 作者使用以下代码演示了整数溢出 Integer MAX VALUE Int
  • 我可以在 Java 8 中使用 Clojure 函数作为 Lambda 函数吗?

    我在 Clojure 中使用了许多库来生成符合 Clojure lang IFN https github com clojure clojure blob master src jvm clojure lang IFn java 界面 它
  • 为什么 clojure-mode 用一些卷曲的 f 字符替换 fn ?

    我刚刚开始使用 emacs 入门套件和 clojure 模式 现在 当我输入或粘贴 fn 在 Clojure 模式下进入缓冲区 fn 字符在窗口中被替换为稍微卷曲的小写字母 f 缓冲区已正确保存 但这非常烦人 尤其是当我以艰难的方式发现该功
  • Clojure MySQL 语法错误异常(“[...] 靠近 '???????????????' [...]”)

    除了建立连接之外 我在使用 clojure contrib sql 做任何事情时都遇到困难 我有一个 mysqld 在 localhost 3306 上运行 数据库名为clj db 用户 clj user localhost 和密码 clj
  • Clojure 中的快速素数生成

    我一直在努力解决欧拉计划 https projecteuler netClojure 中的问题得到了改善 我已经遇到过几次素数生成问题 我的问题是它花费的时间太长了 我希望有人能帮助我找到一种有效的方法 以 Clojure 的方式做到这一点
  • Clojure 的映射和减少 Monad...Juxt Monad 怎么样?

    在学习 Clojure 的过程中 我花了很长时间试图理解 monad 它们是什么以及我们如何使用它们 但没有取得太大成功 然而 我发现了一个很棒的 Monads for Dummies 视频系列 http vimeo com 2071730
  • 使用 swank-clojure 攻击 Clojure 库的工作流程

    Clojure 库的黑客攻击有典型的工作流程吗 假设我的应用程序 Foo 依赖于第三方库 Bar 该库是从存储库获取的 并通过以下方式包含在项目 Foo 中lein deps 然后 假设我想破解 Bar 库 所以我从 github 克隆它
  • 如何解构向量以用作函数参数

    在 Python 中 您可以将列表或元组传递给函数并让函数解压参数 我怎样才能在 Clojure 中做到这一点 下面是一些 Python 代码示例 def f a b c d print a a print b b print c c pr
  • clojure.spec 人类可读的形状?

    使用 clojure spec 有没有办法为嵌套映射定义更 人类可读 的规范 以下内容读起来不太好 s def my domain entity s keys req un a b s def a s keys req un c d s d
  • Clojure 尾递归与质因数

    我正在尝试自学 clojure 并使用 Prime Factors Kata 和 TDD 的原则来实现这一目标 通过一系列 Midje 测试 如下所示 fact primefactors 1 gt list fact primefactor
  • 在 Android 上运行 Java 字节码 - DalvikVM 之上的 Sun JVM

    由于 java 实现 OpenJDK 和Android的虚拟机DalvikVM是开源的 因此必须可以在Google的DalvikVM之上实现Sun的JavaVM 这将使运行基于 JVM 的应用程序和语言成为可能 Clojure Jython
  • 惰性序列内部究竟如何工作

    我是 clojure 的新手 不清楚惰性序列在内部是如何工作的 或者更具体地说 返回惰性序列的函数意味着只有在需要时才会计算结果 例如在下面的例子中 defn fc lazy fn xs lazy seq if let xss seq xs
  • 在 Clojure 中处理两个序列中的值对

    我正在尝试加入 Clojure 社区 我经常使用 Python 我广泛使用的功能之一是 zip 方法 用于迭代值对 在 Clojure 中是否有一种 聪明且简短的 方法可以实现相同的目标 另一种方法是简单地将 map 与一些按顺序收集其参数
  • 没有这样的命名空间:clojurescript 项目设置中的 clojure.spec.alpha

    我在尝试学习clojure spec 在沿着启动构建工具设置 clojure 项目时 我在需要 clojure spec alpha 时遇到以下错误 Compiling ClojureScript js app js No such nam
  • defn 和 defmacro 和有什么不一样?

    defn 和 defmacro 和有什么不一样 函数和宏有什么区别 defn定义一个函数 defmacro定义一个宏 函数和宏之间的区别在于 在函数调用时 首先评估函数的参数 然后使用参数评估函数体 另一方面 宏描述了从一段代码到另一段代码
  • Clojure 宏总是泄漏吗?

    如果你读过这个问题宏 gt 带有匿名函数 https stackoverflow com questions 10740265 macro with anonymous functions 10740411 comment13981517
  • 如何在线程 (->) 宏中输入提示?

    我有一些 Clojure 代码试图通过几层 Java 代码进行互操作 在本例中 java nio Path http docs oracle com javase 7 docs api index html java nio file Pa

随机推荐

  • 使用 selenium 和 bs4 进行网页抓取

    我正在尝试基于该页面的网络抓取构建一个数据框 https www schoolholidayseurope eu choose a country https www schoolholidayseurope eu choose a cou
  • 新的字符错误C(新的未声明)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我不知道为什么新的会给我一个错误 这是代码 感谢您的帮助 include
  • 如何在html5画布上绘制圆柱体

    我想在画布上画一个圆柱体 并用控制箱来调整圆柱体的大小 这是我为回答我自己的问题而创建的一些 JavaScript 代码 function drawCylinder x y w h context beginPath to draw the
  • 如何使用dropzone上传base64图片资源?

    我正在尝试上传生成的客户端文档 目前的图像 Dropzone js http www dropzonejs com init js var myDropzone new Dropzone form dropzone autoProcessQ
  • 如何检测对象变量是否已更改?

    我有一个代表栅栏的类 其内部由矩形和圆形标记对象 也是我的类 组成 栅栏有 4 个变量 x1 x2 y1 和 y2 如果发生任何这些更改 我必须修改或重建内部标记对象 存储和检查 4 个值并不是什么大问题 但这只是我的世界对象类中的第一个
  • gtkmm-4.0 在 macOS Monterey 上运行时遇到问题

    我无法让 gtkmm 4 0 在 Mac OS Monterey 上运行 这是一个使用 gtkmm4 的简单 C 应用程序 helloworld cpp include
  • 手机关机后如何启动闹钟

    在我的应用程序中 我使用AlarmManager类设置闹钟 为了在手机重新启动后触发警报 我使用了BroadcastReceiver 一切正常 我的闹钟定期触发 现在在这种情况下出现了问题 假设我当前的时间是2 30 pm我把闹钟定在2 3
  • Async Await 不适用于 React useStates 的状态

    我有一个 onClick 函数来删除一个项目 当用户单击该按钮时 状态deletedItem将被分配该项目 这是代码
  • 缓存大小和数组大小如何影响数组上数学运算的性能?

    我正在尝试学习缓存的用法 从我通过一些示例实验程序看到的情况来看 如果我将数组大小增加到超过特定值 则执行程序迭代数组并对元素进行一些操作所需的时间会突然增加很多 任何人都可以简单地解释一下术语缓存大小和数组大小如何影响数组上数学运算的性能
  • Google Analytics - iOS 安装跟踪

    我目前正在开展一个项目 该项目使用 Google Analytics 来跟踪整个应用程序中的各种情况 我想做的最后一件事是根据应用程序的某种促销来跟踪应用程序安装 经过一番搜索后 我发现了一篇关于 Google Analytics 的 iO
  • 提取图像文件元数据

    我希望能够在不打开文件的情况下提取图像的元数据和扩展属性 换句话说 如何以编程方式访问在 Windows 中右键单击文件并选择 详细信息 选项卡时显示的信息 使用 Net Framework 4 5 及更高版本执行此操作的正确方法是什么 我
  • 何时使用“window.onload”?

    在 JavaScript 中 当我想在页面加载后运行一次脚本时 我应该使用window onload或者只写脚本 例如 如果我想要一个弹出窗口 我应该写 直接在
  • JavaFX 块 GUI 中的繁重渲染任务(在画布中)

    我想创建一个在画布中执行许多渲染的应用程序 正常的 JavaFX 方式会阻止 GUI 在下面的应用程序代码中按下按钮确实很困难 使用 Java 8 运行 我在网上搜索了一下 但JavaFX不支持后台渲染 所有渲染操作 如中风线 都存储在缓冲
  • React Router 不渲染组件

    我想创建一个带有登录名的 React 应用程序 为了维护用户状态 我想使用上下文API https reactjs org docs context html随 React 16 3 引入 在实现登录路由时 我遵循了React Router
  • 如何从 GridView 的适配器获取每个 EditText 的值?

    我正在开发一个矩阵计算器应用程序 但我无法弄清楚如何获取 GridView 中每个 EditText 的值 我需要获取这些值以便将它们放入另一个矩阵中并计算它 如果用户想要使用 3x2 矩阵 则 GridView 的外观如下 这是一个包含六
  • 在 Jquery 中设置全局变量 onclick

    我想在Jquery中设置一个全局变量 以便当我单击列表项时 单击的列表项的id成为该变量的值 我有下面的代码 它也在这把小提琴 http jsfiddle net LbZe6 然而我的方式是 当您单击列表项时 该值会正确放入 console
  • 迦太基构建失败

    I ran carthage bootstrap platform iOS并得到 由于错误而跳过安装realm cocoa framework二进制文件 不兼容的Swift版本 框架是用3 1构建的 本地版本是4 0 然后在构建结束时我得到
  • 使用参数元组进行测试的 Pytest 文本注释

    我正在为此类问题寻找更优雅的解决方案 def ids x if isinstance x int return str x elif isinstance x str return x 0 pytest mark parametrize n
  • window.getSelection() 与 HTML 标签的偏移量?

    如果我有以下 HTML div class content Vivamus span luctus span urna sed urna ultricies ac tempor dui sagittis div 我举办了一个活动mouseu
  • 协议中的提示返回类型在 Clojure 中是否有任何影响?

    您可以在协议中暗示返回类型 defprotocol Individual Integer age this 并且编译器将使您的方法符合 defrecord person Individual String age this one Comp