首页 > 解决方案 > 我不明白如何在 Julia 中定义类型

问题描述

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

x = 64.0::MyType

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

x = 64.0::Float32

我得到错误

ERROR: TypeError: in typeassert, expected Float32, got Float64

我发现以下内容没有给我错误

x = convert(Float32,64.0)

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

标签: typesjulia

解决方案


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

请务必注意,您的第一个示例x = 64.0::MyType不是您创建多个类型的方式MyType。当符号a::MyType出现在表达式的右侧时,它是一种类型断言。它将返回aifaMyType( 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

请注意,附加::Float32Float32文字值不是必需的,实际上是多余的。所以不要x = 64.0f0::Float32像@DaveNewton 建议的那样写,你可以写x = 64.0f0.


推荐阅读