我在代码中使用了很多Int32s,因为我有一些大型数组。但对于某些x::Int32我们来说typeof(x+1) == Int64,因为默认情况下是数字文字Int64(我必须使用 64 位 Julia 来处理我的数组)。问题是,如果我有一些函数,f(x::Int32)那么f(x+1)方法就会出错。我不想f(x::Int64) = f(convert(Int32, x))为几乎每个函数都实现 a ,并希望使用具体类型来实现类型稳定性。目前,我的代码中只有这样的表达式x + Int32(1),看起来非常混乱。对于其他类型,我们有简写,即1.f0给我 aFloat32和big"1"a BigInt。有类似的东西吗Int32?
由于您明确提到了big_str宏 ( big""),您可以轻松地为 Int32 定义类似的宏(与定义 uint128_str 和 int128_str 的方式相同):
macro i32_str(s)
parse(Int32, s)
end
Run Code Online (Sandbox Code Playgroud)
julia> typeof(i32"1")
Int32
Run Code Online (Sandbox Code Playgroud)
这可能仍然会使您的代码过于混乱,因此您也可以利用数字后跟名称的乘法:
struct i32 end
(*)(n, ::Type{i32}) = Int32(n)
Run Code Online (Sandbox Code Playgroud)
julia> typeof(1i32)
Int32
Run Code Online (Sandbox Code Playgroud)