我不明白如何在 Julia 中定义类型

nia*_*a82 4 types julia

我正在学习 Julia,我对 Types 有点困惑。我的是一个非常基本的问题。我明白如果我写

x = 64.0::MyType
Run Code Online (Sandbox Code Playgroud)

x 应包含值 64,Type 等于 MyType。但是如果我写

x = 64.0::Float32
Run Code Online (Sandbox Code Playgroud)

我收到错误

ERROR: TypeError: in typeassert, expected Float32, got Float64
Run Code Online (Sandbox Code Playgroud)

我发现以下没有给我一个错误

x = convert(Float32,64.0)
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?好像太纠结了。

Cam*_*nek 9

@NilsGudat 和@DaveNewton 的答案都正确但不完整,所以让我提供一些详细说明。

请务必注意,您的第一个示例x = 64.0::MyType, 是不是你如何创建一个号码类型的MyTypea::MyType当出现在表达式的右侧时,表示法是类型断言。它将返回aif的值aMyType( a isa MyType)的子类型,但如果a不是MyType它的子类型则抛出异常。在您日常的 Julia 代码中,您不太可能经常需要它。有关类型声明和断言的更多信息,请参阅有关类型声明的手册部分和性能提示中的本部分

正如@DaveNewton 指出的那样,Julia 提供了用于创建数字的文字语法Float32。语法类似于 的科学记数法Float64,例如4.5e2,除了e被替换为f

julia> 4.5f2
450.0f0

julia> 450f0
450.0f0

julia> typeof(4.5f2)
Float32
Run Code Online (Sandbox Code Playgroud)

请注意,附加::Float32Float32文字值不是必需的,实际上是多余的。因此,不是x = 64.0f0::Float32按照@DaveNewton 的建议进行编写,您只需编写x = 64.0f0.


Dav*_*ton 8

朱莉娅默认为Float64. Float32文字需要一个f(而不是一个e):

x = 64.0f0::Float32
Run Code Online (Sandbox Code Playgroud)

正如雷纳特补充的那样:

https://docs.julialang.org/en/v1/manual/integers-and-floating-point-numbers/

(这是我用来回答这个问题的,因为我不认识 Julia。但我知道如何搜索 :)


Nil*_*dat 5

问题是输入64.0自动是一个Float64

julia> typeof(64.0)
Float64
Run Code Online (Sandbox Code Playgroud)

因此你想直接构造一个Float32像这样的:

julia> Float32(64.0)
64.0f0

julia> typeof(ans)
Float32
Run Code Online (Sandbox Code Playgroud)