Стандартный подход для проверки, содержит ли какой-либо словарь какой-либо ключ:
:+ 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
name, так как parse
- это функция, определенная в Base, поэтому мы не хотим иметь конфликт имен.Наконец, ваш myparse
является рекурсивным, поэтому вы должны определить второй метод для этой функции, обрабатывающий случай, когда expr
не является Array{Any}
.