我想写这个函数:
\nis_almost_zero(x::T)::Bool where {T<:Real} = x \xe2\x89\x88 zero(T)\nRun Code Online (Sandbox Code Playgroud)\n但是,此代码会导致错误:
\njulia> is_almost_zero(x::T)::Bool where {T<:Real} = x \xe2\x89\x88 zero(T)\nERROR: UndefVarError: T not defined\nStacktrace:\n [1] top-level scope\n @ REPL[7]:1\nRun Code Online (Sandbox Code Playgroud)\n使用“完整”语法进行函数定义效果很好:
\njulia> function is_almost_zero(x::T)::Bool where {T<:Real}\n x \xe2\x89\x88 zero(T)\n end\nis_almost_zero (generic function with 1 method)\nRun Code Online (Sandbox Code Playgroud)\n省略返回类型也可以:
\njulia> is_almost_zero(x::T) where {T<:Real} = x \xe2\x89\x88 zero(T)\nis_almost_zero (generic function with 1 method)\nRun Code Online (Sandbox Code Playgroud)\n关于参数方法的文档中给出了类似的工作示例:mytypeof(x::T) where {T} = T。
但是,我想指定返回类型,但显然我不能。错误消息没有告诉我表达式的哪一部分导致了错误,但错误本身看起来与我没有指定的情况类似where部分的情况类似:
julia> is_almost_zero(x::T)::Bool = x \xe2\x89\x88 zero(T)\nERROR: UndefVarError: T not defined\nStacktrace:\n [1] top-level scope\n @ REPL[23]:1\nRun Code Online (Sandbox Code Playgroud)\n所以看起来朱莉娅并没有“看到”where {T<:Real}我原始代码中的部分?
根据文档,完整语法和“赋值形式”应该相同:
\n\n\n上面演示的传统函数声明语法相当于以下紧凑的“赋值形式”
\n
这个问题的答案表明,这两种定义函数的方式是“功能相同”和“等效”。
\n如何指定这样的单行参数函数的返回类型?
\nis_almost_zero(x::T)::Bool where {T<:Real} = x \xe2\x89\x88 zero(T)\nRun Code Online (Sandbox Code Playgroud)\n
当有返回类型注释时,解析单行代码会出现问题,您可以使用括号来帮助解析器解决这个问题:
\n(is_almost_zero(x::T)::Bool) where {T<:Real} = x \xe2\x89\x88 zero(T)\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
153 次 |
| 最近记录: |