【发布时间】:2020-11-05 18:34:51
【问题描述】:
(问题指 Julia 版本 v1.5)
我试图了解 @deprecate 宏在 Julia 中的工作原理。 documentation 不幸的是我不清楚:
@deprecate old new [ex=true]弃用旧方法并指定替换调用新方法。防止 @deprecate 通过将 ex 设置为 false 来导出旧的。 @弃用 定义了一个与旧方法具有相同签名的新方法。
警告: 从 Julia 1.5 开始,@deprecate 定义的函数在没有设置 --depwarn=yes 标志的情况下运行 julia 时不会打印警告,因为 --depwarn 选项的默认值为 no。警告是从 Pkg.test() 运行的测试中打印出来的。
例子
julia> @deprecate old(x) new(x)旧(具有 1 种方法的通用函数)
julia> @deprecate old(x) new(x)假旧(具有 1 种方法的通用函数)
那我该怎么办?
function old(x::Int)
print("Old behavior")
end
function new(x::Int)
print("New behavior")
end
# Adding true/false argument doesn't change my observations.
@deprecate old(x) new(x) # false
old(3)
# Prints "Old behaviour". No warning.
# Also: The deprecation is not mentioned in the help (julia>? old)
这个@deprecate 宏的目的似乎是替换函数?我觉得这违反直觉。如何将功能标记为已弃用(即用户应该收到警告和提示可以使用什么作为替代品,也应该在文档中)?
编辑:我注意到我的错误。签名(在我的情况下为::Int)必须相同才能正常工作。但是,如何获得警告?
【问题讨论】:
标签: julia deprecated