Parsing 海森堡与茱莉亚';什么是语法分析?

Parsing 海森堡与茱莉亚';什么是语法分析?,parsing,debugging,casting,type-conversion,julia,Parsing,Debugging,Casting,Type Conversion,Julia,在上,我需要将字符串解析为整数。我为此编写的函数是 function fd(s::String, fromto::UnitRange)::Bool try parse(UInt, s) in fromto catch ArgumentError false end end 在isvalid中多次调用该函数,该函数用于所有输入,以计算有效内容的数量 结果始终为0,并且相应的测试不断失败。然后我提取了一个失败的测试内容,并调试到isv

在上,我需要将字符串解析为整数。我为此编写的函数是

function fd(s::String, fromto::UnitRange)::Bool
    try
        parse(UInt, s) in fromto
    catch ArgumentError
        false
    end    
end
isvalid
中多次调用该函数,该函数用于所有输入,以计算有效内容的数量

结果始终为0,并且相应的测试不断失败。然后我提取了一个失败的测试内容,并调试到
isvalid
它通过了

我重新设计了一些东西,并进行了更多的测试,同样的事情不断发生:

  • 定期运行代码,
    fd
    从未返回
    true
  • 当我逐步通过时,我得到了预期的
    true
  • 替换
    后,将
    解析为

    function fd(s::String, fromto::UnitRange)::Bool
        parsed = tryparse(UInt, s)
        if isnothing(parsed)
            false
        else
            parsed in fromto
        end
    end
    
    它立即起到了作用,并且解决了这个问题

    这两个版本的函数不应该总是返回相同的结果吗?这里发生了什么事

    更新1 这就是我使用的示例:

    println("Sample is ", isvalid(Dict(
        "hcl" => "#623a2f",   # check with regex
        "ecl" => "grn",       # checked with set
        "pid" => "087499704", # check with regex
        "hgt" => "74in",      # check with regex
        "iyr" => "2012",      # this was parsed
        "eyr" => "2030",      # this was parsed
        "byr" => "1980",      # this was parsed
    )))
    
    更新2 这篇文章只有一部分代码。如果您想亲自尝试,您可以在获取完整文件。我还录制了一段视频,显示了调试前后的不同行为


    通过
    @assert fd(“2010”,2000:2020)=fdt(“2010,2000:2020)
    在一种情况下失败,而在另一种情况下失败,可以非常清楚地说明这一点。

    您可以提供结果不同的示例输入吗?当然,对不起。这给出了(毫不奇怪):
    错误:方法错误:没有有效的方法匹配(::Dict{String,String})
    @StefanKarpinski,您现在可以找到完整的代码和视频链接。对不起,花了点时间。