我对朱莉娅(Julia)相当陌生,她试图弄清楚如何检查给定的表达式是否包含在我创建的Dict中。
function parse( expr::Array{Any} )
if expr[1] == #check here if "expr[1]" is in "owl"
return BinopNode(owl[expr[1]], parse( expr[2] ), parse( expr[3] ) )
end
end
owl = Dict(:+ => +, :- => -, :* => *, :/ => /)
我看过Julia的文档和其他资源,但是找不到任何答案。
“ owl”是我要检查的字典的名称。我想运行return语句,expr [1]应该是“ +,-,*或/”。
答案 0 :(得分:3)
检查某些词典是否包含某些键的标准方法是:
:+ in keys(owl)
或
haskey(owl, :+)
您的解决方案取决于这个事实,你确信0
是不是在字典中的值,这可能不是一般的真实之一。但是,如果你想用这种方法(它时,你不想执行两次在字典中查找是有用的:第一次检查,如果它包含了一些关键的,并第二次获得分配,如果它的关键价值存在),那么通常你会使用nothing
作为定点,然后进行检查get_return_value !== nothing
(注二等=
在这里 - 他们是重要的编译器生成高效的代码)。因此您的代码将如下所示:
function myparse(expr::Array{Any}, owl) # better pass `owl` as a parameter to the function
v = get(expr[1], owl, nothing)
if v !== nothing
return BinopNode(v, myparse(expr[2]), myparse(expr[3]))
end
# and what do we do if v === nothing?
end
请注意,我用myparse
名称,如parse
是在基地中定义的函数,所以我们不希望有一个名称冲突。最后,您的myparse
是递归的,因此您应该为此函数定义第二种方法,以处理expr
不是Array{Any}
时的情况。
答案 1 :(得分:0)
我觉得自己这么快找到了一个白痴,但是我想出了以下解决方案:(但是,我想听听更有效的答案)
yes = 1
yes = get(owl,expr[1],0)
if yes != 0
#do return statement here
如果在字典“ owl”中找不到表达式,则“ yes”应设置为等于0。因此,一个简单的!= if语句来查看它是否为零即可解决我的问题。