将更新的函数传递给现有函数

2024-01-01

在这个简短的序列中,用户创建了一个函数userfunc(),但随后想要更新第一个定义以执行不同的操作。但是,那programfunc()已经编译了第一个版本,并继续使用它。

userfunc(str, n) = str ^ n
userfunc("hello", 3)

"hellohellohello"

# program makes use of the user's function
programfunc(func, a, b) = func(a, b)
programfunc(userfunc, "hello", 3)

"hellohellohello"

# now the user redefines the function
userfunc(str, n) = str ^ (n * n)
# userfunc("hello", 3) give "hellohellohellohellohellohellohellohellohello"

# but program still makes use of the first userfunc()
programfunc(userfunc, "hello", 3)

"hellohellohello"

那么怎么可能programfunc()被定义以便它始终使用传递给它的函数的最新定义?


invoke会做的。 (请注意,尽管这可能不会编译为漂亮的专用代码)

这里的问题是朱莉娅专注于类型。 也就是说,它为传递给它的每个类型组合编译该函数的自定义版本。 由于函数在 julia 0.5 中有一个类型 (每个函数都是单例类型。) 这导致它专注于该功能

在 0.5-rc0 上测试

julia> userfunc(str, n) = str ^ (n*n)
WARNING: Method definition userfunc(Any, Any) in module Main at REPL[16]:1 overwritten at REPL[20]:1.
userfunc (generic function with 1 method)

julia> function programfunc(func, a, b)
       invoke(func, (typeof(a), typeof(b)), a, b)
       end
programfunc (generic function with 1 method)

julia> programfunc(userfunc, "hello", 3)
"hellohellohellohellohellohellohellohellohello"

julia> userfunc(str, n) = str ^ (n)
WARNING: Method definition userfunc(Any, Any) in module Main at REPL[16]:1 overwritten at REPL[20]:1.
userfunc (generic function with 1 method)

julia> programfunc(userfunc, "hello", 3)
"hellohellohello"

请注意,这也适用于#265 https://github.com/JuliaLang/julia/issues/265

julia> foo(x)=2*x
foo (generic function with 1 method)


julia> function g(x)
       invoke(foo, (typeof(x),), x)
       end
g (generic function with 1 method)

julia> g(2)
4

julia> foo(x)=3*x
WARNING: Method definition foo(Any) in module Main at REPL[1]:1 overwritten at REPL[10]:1.
foo (generic function with 1 method)

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

将更新的函数传递给现有函数 的相关文章

随机推荐

  • 核心图 - 防止缩放/缩放图以显示完整的轴范围

    我的 y 轴边界从 0 到 100 x 轴边界从 0 到 10 当我绘制数据点 0 85 和 1 86 时 仅显示包含数据点的绘图部分 我明白这有什么用处 但就我而言 我需要显示整个轴 未缩放 有没有办法显示完整的轴 而无需缩放到数据点 感
  • 在 WPF 中向 DataGrid 添加行?

    因此在 WinForms 中您可以轻松添加一行 例如 dataGridView1 Rows Add user Handle c 但在 WPF 中 当我尝试使用 DataGrid 时 没有 行 属性 有没有什么方法可以在 WPF 中做到这一点
  • redis.conf 中的“tcp-backlog”是什么

    我很困惑tcp backlog在 redis conf 中 TCP listen backlog In high requests per second environments you need an high backlog in or
  • 如何处理SonataAdminBundle列表视图中的每个实体?

    如何将一些代码应用于管理员列表视图中显示的每个实体 例如 如果我有一个TagManager并且需要为每个显示的实体加载标签 我该怎么做 是否有一种方法可以在实体的管理中覆盖 或者我可以绑定到某些列表表单事件吗 我找不到地方可以做到这一点 我
  • 使用 hyper 将块流异步写入文件

    我正在尝试创建一个简单的函数 使用 hyper 将远程文件下载到本地文件路径 我也需要异步写入文件 在我的例子中我使用tokio fs为了那个原因 这是代码 Parts of the code were omitted see the pl
  • 将文件读入结构体 (C++)

    我正在尝试从二进制文件读取数据并将其放入结构中 的前几个字节data bin are 03 56 04 FF FF FF 我的实现是 include
  • .NET MAUI 中的 Android 深度链接(意图)支持

    我目前正在尝试向使用 NET MAUI 编写的 Android 应用程序添加深度链接支持 通过 Intents 我添加了一个activityXML 元素下应用我的 AndroidManifest xml 中的元素
  • 使用 NGINX 将 Gatsby 托管在子目录上

    我如何使用 nginx 将 gatsby js 托管在子目录上 我已经尝试过使用proxy pass http 127 0 0 1 8000 with gatsby develop但我遇到了 Socket io 的问题 有谁知道如何在我尝试
  • GetMessage 超时

    我有一个第二个线程调用的应用程序GetMessage 循环中 在某个时刻 第一个线程意识到用户想要退出应用程序并通知第二个线程它应该终止 由于第二个线程被卡住GetMessage 程序永远不会退出 有没有办法让消息超时等待 我也对其他想法持
  • 使用 OrderBy、ThenBy 排序

    我正在尝试根据先前排序的列对表的几列进行排序 它对于前两列效果很好 但是 一旦我对第三列进行排序 第二列就会失去排序 据我目前所知 我的 foreach 循环一定有问题 这是我的排序代码 public List inhaltSortiere
  • gif动画完成时触发javascript

    我有一个网站 上面有一个不重复的 gif 所以看起来正在加载 我想要一个 javascript 脚本来检测 gif 动画何时完成 然后重定向到另一个站点 这可能吗 我不能只将其设置为 5 秒 因为不同的计算机 平板电脑在不同的时间加载它 如
  • [React]将异步数据获取到组件中的不同方式

    我对 React 世界有点陌生 最近当我开始在组件内编写 Ajax 内容时 我感到很困惑 据我所知 这里有两种渲染方式异步将数据放入组件中 如下所示 1st way class MyComponent extends React Compo
  • 使用 free() 时出现分段错误

    此代码会导致分段错误 int main char p char a 50 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa p char malloc 50 sizeof char if p
  • “[文章] 使用 WSO2 API Manager 启用 API 货币化”相关问题

    我尝试根据文章将 POC WSO2 APIM 与计费引擎集成1 http wso2 com library articles 2016 07 article enabling monetization of apis with wso2 a
  • 将值和数字格式从一个范围复制到另一个范围?

    下面的行没有出现错误 我将值从一个范围复制到另一个范围 ThisWorkbook Sheets Output Range F lastRowOutput 1 M lastRowOutput 1 Value projectWb Sheets
  • 使用 Zoom SDK 最小化视频通话和共享视图

    我正在尝试将 Zoom SDK 会议集成到 Android 应用程序中 我已经努力使用自定义会议用户界面并学习如何使用 Zoom 的视频视图 称为MobileRTCVideoView 这是我想创建的界面 我尝试过的 研究了 Zoom 的示例
  • 在本机 C++ 中锁定 GDI+ 位图?

    我可以找到很多关于如何在托管 c 中执行此操作的示例 但没有找到非托管的示例 我希望尽可能高效地获取所有像素数据 但我需要更多有关 scan0 内容的一些信息 以便我可以正确地迭代像素数据并从中获取每个 rgba 值 现在我有这个 Bitm
  • lxml 在 Solaris 10 上构建

    请您就 python 2 6 6 和 lxml Solaris 10 构建问题提供帮助和建议吗 安装说明 www sunfreeware com download html 直接链接到文件 http www sunfreeware com
  • CSS 动画 onclick 和反转 next onclick

    我正在使用精灵表和关键帧在单击按钮时为按钮上的图像设置动画 当单击按钮时 我希望帧沿一个方向运行 并将按钮保留在精灵表中的最后一个图像上 当再次单击按钮时 我希望相同的帧向后运行 将按钮保留在精灵表中的第一个图像上精灵表 我目前正在尝试使用
  • 将更新的函数传递给现有函数

    在这个简短的序列中 用户创建了一个函数userfunc 但随后想要更新第一个定义以执行不同的操作 但是 那programfunc 已经编译了第一个版本 并继续使用它 userfunc str n str n userfunc hello 3