Julia中失败匹配()的返回类型是什么



在以下内容中:

julia>e=如果为false;终止juliajulia>f=匹配(r"x","y")julia>fjulia>a=[]0元素数组{Any,1}julia虚假的julia>e==ftrue

。。。这里的e和f是什么类型的?

来自文档:s中搜索正则表达式r的第一个匹配项,并返回包含该匹配项的RegexMatch对象,如果匹配失败,则不返回任何对象(可能会从零更改为nothing-感谢您指出这一点!:)BTWnothing是Void类型的单例。您可以检查match(r"x", "y") == nothingmatch(r"x", "y") === nothing

编辑:文档中的更多解释:"如果正则表达式与给定字符串不匹配,match()将返回nothing,这是一个特殊值,不会在交互提示下打印任何内容。除了不打印之外,它是一个完全正常的值,您可以通过编程对其进行测试:…(这里的示例带有===运算符)…">

(我现在不认为这是理想的!此时此刻公关的空间可能就在这里:)

来自手册:

如果块也返回一个值。。。此值只是返回值选择的分支中最后执行的语句的值

在您的情况下,没有执行的语句,因为if条件的计算结果为false。在这种情况下,julia返回特殊类型Void,它也绑定到字nothing,即

julia> typeof(nothing)
Void

然而,即使您的if条件评估为true,它仍然不包含要执行的语句,因此julia将再次返回nothing,即

julia> typeof(if true ; end)
Void

要从if块中获得Void以外的返回类型,您需要执行一条语句,例如

julia> typeof(if true ; 3 ; end)
Int64

现在,在您提供的代码中,您将if false ; end的输出分配给e(顺便提一下,在julia v1.0之前,这是一个坏主意,因为e已经在julia中用于特殊常数Euler数,即

julia> typeof(e)
Irrational{:e}
julia> e
e = 2.7182818284590...

这就是为什么你会从你的第一行代码中收到警告信息:

julia> e = if false; end
WARNING: imported binding for e overwritten in module Main

但是julia仍然按照您的要求执行,并将if false; end的输出分配给e,因此现在:

julia> typeof(e)
Void

现在,nothing与空向量不是一回事。空向量仍然是一种特殊的类型,即使它没有元素:

julia> typeof([])
Array{Any,1}

因此它立即如下:

julia> if false ; end == []
false

这就是为什么您的e == a返回false。现在让我们来看看match的文档。在REPL键入?match,第一行状态为:

搜索s中正则表达式r的第一个匹配项并返回包含匹配项的RegexMatch对象,如果匹配项则不包含失败

因此,如果正则表达式找不到匹配项,则返回类型为Void(因此返回值为nothing)。显然,在您的情况下,match(r"x", "y")找不到匹配项,因此它返回Void并将其分配给f。由于ef现在都是nothing(即Void类型),因此e == f立即返回true,或者换句话说:

julia> if false ; end == match(r"x", "y")
true

相关内容

  • 没有找到相关文章

最新更新