gpt4 book ai didi

julia - 在 Julia 的一行中定义多个相同类型的变量?

转载 作者:行者123 更新时间:2023-12-01 09:39:56 25 4
gpt4 key购买 nike

在 C++ 中你可以这样写:

double x = 0.0, y = 0.0, z = 0.0;

代替:

double x = 0.0; double y = 0.0; double z = 0.0;

定义三个相同类型的变量,在本例中为double

在 Julia 中,类似的是:

x::Float64 = 0.0, y::Float64 = 0.0, z::Float64 = 0.0

是否有语法糖,就像上面的 C++ 一样,允许我省略三个类型说明符,当它们都相同时只用一个替换它们?

注意:我知道我可以写

x = y = z = 0.0

然后让 Julia 推断类型。这不是我想要的。我想明确声明 x,y,z 的类型是常量。

最佳答案

实际上,下面并没有将它们声明为 Julia 中的变量

x::Float64, y::Float64, z::Float64

至少根据我的调查,你需要更多类似的东西:

local x::Float64 = zero(Float64)
local y::Float64 = zero(Float64)
local z::Float64 = zero(Float64)

据我所知,这样做没有语法糖,强制特定类型在 Julia 中并不常见或必要。

编辑:我应该更清楚,尤其是。在@dpsanders 下面的评论之后,我觉得这不是通常应该在 Julia 中完成的事情,尽管类型断言在有限的情况下出于性能原因可能很有用,但使用它们太多你需要语法糖或宏缩短代码似乎是过早优化的情况。

如果你真的想做很多,你可以写一个宏来为你处理它,如下所示:

macro dcl(T, args...)
r = quote end
for var in args
push!(r.args, :( local $(esc(var))::$T = zero($T)) )
end
r
end

我敢肯定一些 Julian 比我有更多的宏观“fu”可以做得更好,但它似乎确实有效,在我的测试中,即:

@dcl(Float64, x, y, z)

编辑:以下演示语法根本不声明任何变量,只是限制从封闭范围获取的变量类型:

julia> function testdecl()
x::Float64, y::Int, z::String
println(x, y, z)
end
testdecl (generic function with 1 method)

julia> @code_warntype testdecl()
Variables:
#self#::#testdecl

Body:
begin # REPL[107], line 2:
(Core.typeassert)(Main.x,Main.Float64)::Float64
(Core.typeassert)(Main.y,Main.Int)::Int64
(Core.typeassert)(Main.z,Main.String)::String # REPL[107], line 4:
return (Main.println)(Main.x,Main.y,Main.z)::Any
end::Any

我想知道这里是不是也有bug,看下面:

julia> function testdcl()
println(y)
x::Float64, y::String
x = 1
println(x)
end
testdcl (generic function with 1 method)

julia> y = 1.234
1.234

julia> testdcl()
1.234
ERROR: UndefVarError: x not defined
in testdcl() at ./REPL[131]:2
in eval(::Module, ::Any) at ./boot.jl:226

julia> @code_warntype testdcl()
Variables:
#self#::#testdcl
x::Union{}

Body:
begin # REPL[131], line 1:
(Main.println)(Main.y)::Any # REPL[131], line 2:
(Core.tuple)((Core.typeassert)(x::Union{},Main.Float64)::Union{},(Core.typeassert)(Main.y,Main.String)::String)::Union{}
end::Union{}

关于julia - 在 Julia 的一行中定义多个相同类型的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37229630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com