【问题标题】:Error using Angle in Julia在 Julia 中使用角度时出错
【发布时间】:2017-11-14 18:44:26
【问题描述】:

我只是想得到一个复数的角度。为了测试 Julia 中提供的角度函数,我首先尝试了:

 angle(1+im)

但我收到以下错误消息:

MethodError:Float64 类型的对象不可调用

堆栈跟踪:[1] include_string(::String, ::String) 在 ./loading.jl:515

当我试图问typeof(1+im) Julia 的答案时

复杂{Int64}

我不明白角度函数发生了什么。我尝试了 1+1*im ,但得到了相同的答案。

有人可以帮忙吗? 我也可以从坐标计算角度,但我也想了解 Julia 语言。

谢谢

【问题讨论】:

  • 尝试重新启动 Julia。它对我来说很好,所以我希望你不小心重新定义了angle...
  • 谢谢,确实,当我询问角度时,我的代码中有一个名为角度的变量,我更改了变量名。我不认为变量和函数,因为它们的名称不同,会被混淆。

标签: julia angle callable


【解决方案1】:

有时可能会意外定义一个与您不知道的内置函数同名的变量。例如,有一个名为angle() 的函数,但你可以这样做:

julia> angle=1.5
1.5

julia> angle(1+1im)
ERROR: MethodError: objects of type Float64 are not callable

julia> typeof(angle)
Float64

现在您无法“看到”函数定义,因为您的变量隐藏了它。

要解决此问题,您可以键入:

julia> angle=Base.angle
angle (generic function with 3 methods)

julia> angle(1+1im)
0.7853981633974483

一个很好的问题是,为什么 Julia 不告诉我我刚刚覆盖了一个基本函数?

附录

答案(感谢@Matt 的评论)是,如果你使用它,然后重新定义它,你会得到一个警告:

              _
   _       _ _(_)_     |  A fresh approach to technical computing
  (_)     | (_) (_)    |  Documentation: https://docs.julialang.org
   _ _   _| |_  __ _   |  Type "?help" for help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 0.6.0 (2017-06-19 13:05 UTC)
 _/ |\__'_|_|_|\__'_|  |  Official http://julialang.org/ release
|__/                   |  x86_64-apple-darwin13.4.0

julia> angle(1+2im)
1.1071487177940904

julia> angle=1.5
WARNING: imported binding for angle overwritten in module Main
1.5

【讨论】:

  • 回复:“为什么 Julia 不告诉我我刚刚覆盖了一个基本函数?”——如果你在隐藏它之前调用或使用它,它会的。但是,例如,如果您不进行日志记录,能够将info 用作变量而不会发出任何警告,这真是太好了。如果这是一个警告(或更糟的是一个错误),那么 Julia 永远无法在不破坏现有代码的情况下导出任何新函数。
  • 感谢您的精确。您能否提供有关代码angle=Base.angle 的更多详细信息?我不明白它是如何工作的。谢谢你。夏琳。
  • 函数和变量通常属于模块。 Base 模块包含许多基本的 Julia 系统(输入 names(Base) |> showall 以查看所有内容)。幸运的是,您不必在使用它们之前输入Base!通过键入Base.angle,您具体指的是 Base 中的函数,而不是您本地定义的版本。并且 Julia 中的函数可以分配给变量:angle=Base.function 在符号 angle 和值 Base.angle 之间创建关联,函数...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-18
  • 2021-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多