gpt4 book ai didi

julia - 为什么 Julia 中的 `where` 语法对换行敏感?

转载 作者:行者123 更新时间:2023-12-04 14:23:43 25 4
gpt4 key购买 nike

在 Stack Overflow 上的另一个问题中,答案包括以下函数:

julia> function nzcols(b::SubArray{T,2,P,Tuple{UnitRange{Int64},UnitRange{Int64}}}) where {T,P<:SparseMatrixCSC}
return collect(i+1-start(b.indexes[2])
for i in b.indexes[2]
if b.parent.colptr[i]<b.parent.colptr[i+1] &&
inrange(b.parent.rowval[nzrange(b.parent,i)],b.indexes[1]))
end
nzcols (generic function with 3 methods)

它被解析没有错误。在 where 之前添加换行符时为了可读性的条款,突然出现一个错误:
julia> function nzcols(b::SubArray{T,2,P,Tuple{UnitRange{Int64},UnitRange{Int64}}})
where {T,P<:SparseMatrixCSC}
return collect(i+1-start(b.indexes[2])
for i in b.indexes[2]
if b.parent.colptr[i]<b.parent.colptr[i+1] &&
inrange(b.parent.rowval[nzrange(b.parent,i)],b.indexes[1]))
end
ERROR: syntax: space before "{" not allowed in "where {"

最后,当参数列表括号移到 where行,错误再次消失:
julia> function nzcols(b::SubArray{T,2,P,Tuple{UnitRange{Int64},UnitRange{Int64}}}
) where {T,P<:SparseMatrixCSC}
return collect(i+1-start(b.indexes[2])
for i in b.indexes[2]
if b.parent.colptr[i]<b.parent.colptr[i+1] &&
inrange(b.parent.rowval[nzrange(b.parent,i)],b.indexes[1]))
end
nzcols (generic function with 3 methods)

这种语法背后的逻辑是什么,是否应该修复?

最佳答案

这类似于该语言中的许多其他语法;如果解析器在一行的末尾有一个“完整”的语法,它将使用它并继续。

julia> parse("begin; 1 \n+ 2; end")
quote # none, line 1:
1 # none, line 2:
+2
end

julia> parse("begin; 1 +\n 2; end")
quote # none, line 1:
1 + 2
end

请注意,这意味着您仍然可以破解 where子句放到一个单独的行,但 where本身需要与函数的结尾在同一行。

关于julia - 为什么 Julia 中的 `where` 语法对换行敏感?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43983787/

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