使用 Swift 初始化 int4;错误或预期的行为?
Initializing int4 using Swift; bug or expected behaviour?
游乐场代码:
import simd
let test = int4(1,2,3,4) // this works
let x = 1
let test2 = int4(x,2,3,4) // doesn't work (nor does let x: Int = 1)
let y: Int32 = 1
let test3 = int4(y,2,3,4) // works
很明显 int4
需要 Int32
值,但在第一种情况下,它似乎能够在不显式指定 Int 类型的情况下计算出来,但在第二种情况下(当整数首先存储为一个单独的变量)它没有。
这是 Swift 中的预期行为吗?
乍一看,这似乎是预期的行为。
当您指定
let test = int4(1,2,3,4)
那里的整数文字被隐式初始化为 Int32 类型。当你做一个
let x = 1
x 默认为 Int 类型。作为一项安全措施,Swift 不会对整数和浮点类型进行隐式类型转换。您需要将其显式转换为 Int32 才能使其正常工作:
let test2 = int4(Int32(x),2,3,4)
这就是您的第三个示例有效的原因。不是依靠类型推断来设置 y
是什么,而是给它 Int32 类型并且现在类型对齐。
游乐场代码:
import simd
let test = int4(1,2,3,4) // this works
let x = 1
let test2 = int4(x,2,3,4) // doesn't work (nor does let x: Int = 1)
let y: Int32 = 1
let test3 = int4(y,2,3,4) // works
很明显 int4
需要 Int32
值,但在第一种情况下,它似乎能够在不显式指定 Int 类型的情况下计算出来,但在第二种情况下(当整数首先存储为一个单独的变量)它没有。
这是 Swift 中的预期行为吗?
乍一看,这似乎是预期的行为。
当您指定
let test = int4(1,2,3,4)
那里的整数文字被隐式初始化为 Int32 类型。当你做一个
let x = 1
x 默认为 Int 类型。作为一项安全措施,Swift 不会对整数和浮点类型进行隐式类型转换。您需要将其显式转换为 Int32 才能使其正常工作:
let test2 = int4(Int32(x),2,3,4)
这就是您的第三个示例有效的原因。不是依靠类型推断来设置 y
是什么,而是给它 Int32 类型并且现在类型对齐。