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,您现在可以找到完整的代码和视频链接。对不起,花了点时间。