types - 我不明白如何在 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)
这是正确的方法吗?好像太绕了。
解决方案
@NilsGudat 和 @DaveNewton 的答案都是正确但不完整的,所以让我提供一些详细说明。
请务必注意,您的第一个示例x = 64.0::MyType
不是您创建多个类型的方式MyType
。当符号a::MyType
出现在表达式的右侧时,它是一种类型断言。它将返回a
ifa
是MyType
( 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
请注意,附加::Float32
到Float32
文字值不是必需的,实际上是多余的。所以不要x = 64.0f0::Float32
像@DaveNewton 建议的那样写,你可以写x = 64.0f0
.
推荐阅读
- javascript - 在 webstie 上显示来自 DB 的值变化
- php - Laravel,如何使用旧值对表列运行更新
- terraform - 在主输出中找不到模块源的 Terraform 输出
- javascript - 在循环中调用异步等待时出现语法错误
- javascript - Jest 测试没有通过任何参数(变为“未定义”)
- javascript - 当我从 URL 获取 json 数据时,它什么也不显示
- python - C++ vs python numpy 复杂数组性能
- node.js - CURL --resolve 在 node.js axios
- c - 我正在尝试创建一个函数来检查矩阵是否为下三角形,但我在运行它时遇到问题,它说 n 和 int m 没有声明
- tableau-api - 如何在 Tableau 中逐年制作堆积条形图?