是否可以通过 Julia 中的覆盖函数来调用重载函数?

2023-11-21

问题如下:

我有一个抽象类型MyAbstract和派生的复合类型MyType1 and MyType2:

abstract type MyAbstract end

struct MyType1 <: MyAbstract
    somestuff
end

struct MyType2 <: MyAbstract
    someotherstuff
end

我想指定类型对象的一些一般行为MyAbstract,所以我有一个函数

function dosth(x::MyAbstract)
    println(1) # instead of something useful
end

这种一般行为足以MyType1但当dosth使用类型参数调用MyType2,我希望发生一些特定于的其他事情MyType2当然,我想重用现有的代码,所以我尝试了以下方法,但它不起作用:

function dosth(x::MyType2)
    dosth(x::MyAbstract)
    println(2)
end

x = MyType2("")
dosth(x) # StackOverflowError

这意味着朱莉娅没有意识到我尝试治疗x喜欢它的“超类型”有一段时间了。

是否可以从 Julia 中的覆盖函数调用重载函数?我怎样才能优雅地解决这个问题呢?


您可以使用invoke功能

function dosth(x::MyType2)
    invoke(dosth, Tuple{MyAbstract}, x)
    println(2)
end

使用相同的设置,这会给出以下输出,而不是堆栈溢出:

julia> dosth(x)
1
2

目前有一个内部和实验性的宏版本invoke可以这样调用:

function dosth(x::MyType2)
    Base.@invoke dosth(x::MyAbstract)
    println(2)
end

这使得调用语法非常接近您编写的语法。

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

是否可以通过 Julia 中的覆盖函数来调用重载函数? 的相关文章

随机推荐

  • GROUP_CONCAT 具有不同分隔符的多个字段

    是否可以做类似的事情 GROUP CONCAT user price SEPARATOR AS items 结果是John3 99 Mike24 99 我需要的是这样的 John 3 99 Mike 24 99 价格字段基本上使用另一种类型
  • Android中读取广告包

    我正在开发一款 BLE 传感器 用于宣传制造商特定数据 有没有示例代码演示如何在 Android 中接收广告数据包并解析其有效负载 这就是我一直在寻找的 BLE 扫描 API BluetoothAdapter startLeScan Sca
  • jquery 检查元素是否有元素

    我正在使用 jquery 1 3 并尝试复制 1 4 has 功能 我需要检查 page 元素是否包含图像 如果不包含 则附加它 是不是类似 var imageid thirdimage if page has imageid undefi
  • Google Maps API:更改标记动画速度

    谷歌地图 API v3目前支持两种类型动画片 for markers 掉落和弹跳 有什么办法我可以speed up弹跳或减速掉落动画 Google Maps API 不支持动画属性或自定义 仅支持像您所说的那样选择 放置 或 弹跳 应该可以
  • 在 MySQL 中将 IP 转换为 Long

    我正在尝试使用ip2country表显示我网站上用户的国旗 我想到的最简单的方法是编写一条 SQL 语句 从会话表中获取用户并查询他们各自的 IP 是否在某个范围内 从而找出他们的国家 国旗 这很简单 但也很危险 因为当有 300 个在线用
  • 上传Excel并将其存储在数据库中?

    我想将Excel文件上传到我们的网页中 然后将相应的数据存储在数据库中 然后我想检索所有数据并以表格格式显示 我有一个代码 但使用该代码无法上传所有 Excel 文件 只能上传单一格式 下面是该函数 但有一些限制 public functi
  • 错误:无法删除该对象,因为在 ObjectStateManager 中未找到该对象

    试图在这里掌握实体框架 但我遇到了一些障碍 我有一个 Get 方法 工作正常并且已经过测试 但我的 Delete 方法不起作用 public static void Delete string name J1Entities db new
  • 如何将宽度设置为“填充父项”的 Android 按钮中的图标和文本居中

    我想要一个 Android 按钮 其中图标 文本居中 我使用 drawableLeft 属性来设置图像 如果按钮的宽度为 wrap content 但我需要拉伸到最大宽度 所以我使用宽度 fill parent 这会将我的图标直接移动到按钮
  • IntelliJ 无法从本地 Maven 存储库加载源

    我正在做一些测试工作 需要使用 JUnit 中我不熟悉的功能 为了更好地理解这些功能 我希望能够在我的项目旁边查看 IntelliJ 内的 JUnit 源代码 本项目使用Maven 我的 pom xml 文件中列出了 jUnit 的以下依赖
  • 在 find + xargs grep 中得到退出代码 123

    这是我的脚本 eval find type f a name h print0 xargs 0 n100 grep f lt echo stdio echo 未找到任何内容 退出代码为 123 如果我稍微修改一下如下 echo stdio
  • 如何获得连续第二高的值?

    我想从数据帧中获取每一行的某个部分的第二高值 我该怎么做呢 我已经尝试过以下代码 但它不起作用 df iloc 5 3 nlargest 2 axis 1 level 2 还有其他方法可以获得这个吗 使用 apply 和 axis 1 您可
  • 读回 sqlite3 中的日期时间

    我正在使用 Python 创建一个带有时间戳列的内存 sqlite3 数据库 当我在查询中对此列使用 min 或 max 时 该列将作为字符串而不是 Python 日期时间对象返回 我读了一篇Stackoverflow 上的上一个问题它为普
  • “eval”和“int”有什么区别

    早些时候我听说eval input a 会自动将字符串转换为 int 但是如果我编码 age eval input enter age 在输入期间我输入 01 这是一个错误 但是当我编码时 age int input enter age 0
  • TFS 2010 新功能 [已关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 有谁知道我可以去哪里获取 TFS 2010 新功能的列
  • 为分组表视图中的每个部分添加阴影

    如图所示 我想向表视图部分添加阴影 就像表视图有 4 个部分一样 表视图中也会有 4 个阴影视图 func numberOfSections in tableView UITableView gt Int 返回 3 func tableVi
  • Backbone.save POST 而不是 PUT

    只是一个简短的问题 拥有模型的新实例并发出model save URL 设置为 api store category Backbone 发出 POST 据我所知 它应该使用 PUT 就像本中提到的那样 PUT 或 POST 故事的其余部分
  • linux/module.h 没有这样的文件或目录

    在我的论文中 我将使用 ARAN 协议创建一个马奈 安装我正在使用的协议本手册 但是第一步 创建trace route 我收到了错误 例如 linux module h No such file or directory linux pro
  • C# 中的finally 块是必须的吗?

    2个条件有什么区别 每次method1和method2运行时 都应该有一个代码块需要运行 在我看来 两种方法是相同的 example method1 void Method1 void try do something catch Exce
  • OnItemLongClickListener 无法在自定义列表视图中工作

    我希望在长时间单击自定义列表视图中的项目后显示上下文菜单 我正在使用动作栏夏洛克 尝试使用 Toast 通知进行调试 我发现长按事件未触发 如何解决这个问题 m vwJokeLayout ListView findViewById R id
  • 是否可以通过 Julia 中的覆盖函数来调用重载函数?

    问题如下 我有一个抽象类型MyAbstract和派生的复合类型MyType1 and MyType2 abstract type MyAbstract end struct MyType1 lt MyAbstract somestuff e