Доступ к аргументу из анонимной функции в другой функции - PullRequest
0 голосов
/ 09 мая 2020

Мне нужно закодировать функцию с подписью contains(name). Эта функция будет вызываться только в заданном контексте, который

(allNames)->contains("myname")

Я закодировал:

function contains(name)
    for n in allNames
        if n === name
            return true
        end
    end
    return false
end

Проблема в том, что я не могу получить доступ к allNames внутренней функции contains. Между тем, я не могу просто передать его как аргумент функции contains, так как не могу изменить подпись.

Есть предложения, как с этим бороться? Заранее спасибо!

1 Ответ

0 голосов
/ 09 мая 2020

Похоже, вы либо хотите

  1. Dynami c scope , что достижимо только с помощью хаков и обычно не одобряется в языковом дизайне, либо
  2. a частично примененная функция , которую вы можете написать, вернув закрытие:

    containedin(allNames) = name -> in(allNames, name)
    

    или, в этом конкретном случае c, просто как

    in(allNames)
    

    , который вернет Base.Fix1.

...