代码之家  ›  专栏  ›  技术社区  ›  ChrlTsr

在Julia中使用角度时出错

  •  1
  • ChrlTsr  · 技术社区  · 6 年前

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

     angle(1+im)
    

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

    Stacktrace:[1]包含_字符串(::字符串,::字符串) ./加载。jl:515

    当我试着问 typeof(1+im) Julia回答

    复数{Int64}

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

    谁能帮忙吗? 我也可以从坐标计算角度,但我也想理解Julia语言。

    非常感谢。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Community Egal    4 年前

    有时可能会意外地定义一个与您不知道的内置函数同名的变量。例如,有一个函数称为 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