Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Julia 朱莉娅的匿名辩论_Julia - Fatal编程技术网

Julia 朱莉娅的匿名辩论

Julia 朱莉娅的匿名辩论,julia,Julia,Julia允许使用未命名参数定义函数和方法 文档中没有提到这一点,文档中也没有明确讨论这一点。例如: function myfunc(::Int) println("Hello!") end 我应该如何描述这种行为(我在谷歌上搜索了“匿名参数”但没有成功),它什么时候有用?当您只关心参数类型而不关心参数值时,这种行为对于方法调度很有用。最常见的情况是,您分派的是单例类型 例如: julia> Vector{String}(undef, 3) 3-element Array{Str

Julia允许使用未命名参数定义函数和方法

文档中没有提到这一点,文档中也没有明确讨论这一点。例如:

function myfunc(::Int)
    println("Hello!")
end

我应该如何描述这种行为(我在谷歌上搜索了“匿名参数”但没有成功),它什么时候有用?

当您只关心参数类型而不关心参数值时,这种行为对于方法调度很有用。最常见的情况是,您分派的是单例类型

例如:

julia> Vector{String}(undef, 3)
3-element Array{String,1}:
 #undef
 #undef
 #undef
此函数的定义方式如下:

Array{T,1}(::UndefInitializer, m::Int) where {T} =
    ccall(:jl_alloc_array_1d, Array{T,1}, (Any, Int), Array{T,1}, m)
您可以看到,我们只关心第一个参数是
UndefInitializer
类型,它反过来定义为:

struct UndefInitializer end
const undef = UndefInitializer()
我们看到,
UndefInitializer
是一种单例类型,因此我们不关心这种类型的变量的值,而只关心它的类型

Base中另一种常见的单例类型是
缺失
。以下是标准函数的基本定义示例,这些函数将
缺少
作为参数:

for f in (:(acos), :(acosh), :(asin), :(asinh), :(atan), :(atanh),
          :(sin), :(sinh), :(cos), :(cosh), :(tan), :(tanh),
          :(exp), :(exp2), :(expm1), :(log), :(log10), :(log1p),
          :(log2), :(exponent), :(sqrt))
    @eval $(f)(::Missing) = missing
end
(再次-您可以看到,我们并不关心变量的值-我们知道它的类型是
缺失
,因此我们返回
缺失


在Julia手册中,您有此类方法的示例,例如,但无可否认,据我所知,手册没有给出这种方法定义的名称。

即使在基本库中,也不总是使用该功能。例如,数字的长度是用
length(x::number)=1定义的,其中变量
x
没有使用。我在谷歌搜索了“匿名参数”,发现了这个问题