关于 Julia 函数参数语法的问题
Question on Julia function parameter syntax
考虑以下函数签名:function f(xs :: AbstractVector{T}, ::Val{U}, ::Val{V}) where {T, U, V}
。我理解 value types 的概念,但我不确定我是否理解前置双冒号的含义,而且我似乎无法找到任何专门关于这个主题的信息。
在 C++ 中,类似的语法将确保名称的解析发生在全局而不是当前命名空间,但我不确定这是否适用于 Julia(如果适用,如何)。我可以推断这与类型有关,因为使用相同的语法来表示变量的类型,但是没有受让人的类型赋值意味着什么? TIA.
function f(xs :: AbstractVector{T}, ::Val{U}, ::Val{V}) where {T, U, V}
表示对f
的调用必须分别传递AbstractVector
、Val
和Val
三个类型的参数。但是,您仅为第一个参数 xs
捕获传递变量的 value。第二个和第三个参数的值没有被捕获(在这种情况下你并不真正需要它们,因为 Val
是一个单例类型)。但是您捕获类型 T
、U
和 V
,并且可以在函数体中引用它们。
考虑以下函数签名:function f(xs :: AbstractVector{T}, ::Val{U}, ::Val{V}) where {T, U, V}
。我理解 value types 的概念,但我不确定我是否理解前置双冒号的含义,而且我似乎无法找到任何专门关于这个主题的信息。
在 C++ 中,类似的语法将确保名称的解析发生在全局而不是当前命名空间,但我不确定这是否适用于 Julia(如果适用,如何)。我可以推断这与类型有关,因为使用相同的语法来表示变量的类型,但是没有受让人的类型赋值意味着什么? TIA.
function f(xs :: AbstractVector{T}, ::Val{U}, ::Val{V}) where {T, U, V}
表示对f
的调用必须分别传递AbstractVector
、Val
和Val
三个类型的参数。但是,您仅为第一个参数 xs
捕获传递变量的 value。第二个和第三个参数的值没有被捕获(在这种情况下你并不真正需要它们,因为 Val
是一个单例类型)。但是您捕获类型 T
、U
和 V
,并且可以在函数体中引用它们。