Я пытаюсь сохранить строку md5 как переменную экземпляра класса вместо фактического пароля. У меня есть статическая функция, которая вернет строку md5, которую я пытаюсь сохранить в переменной экземпляра вместо фактического пароля.
У меня есть следующий установщик для моей переменной экземпляра класса:
-(void)setPassword:(NSString *)newpass{
if(newpass != password){
password = [utils md5HexDigest:newpass];
}
}
Это вернет обратно исправьте строку md5 и сохраните ее в переменной пароля в моей функции инициализации: [self setPassword: pword] ;.
Если я вызываю другой метод экземпляра и пытаюсь получить доступ к себе. ...
Я реализую элементарную версию LISP на Ruby только для того, чтобы познакомиться с некоторыми концепциями. Я основываю свою реализацию на Lispy Питера Норвига (http://norvig.com/lispy.html).
Однако есть кое-что, чего мне здесь не хватает, и я был бы признателен за помощь ...
Он подклассифицирует dict Python следующим образом:
class Env(dict):
"An environment: a dict of {'var':val} pairs, with an outer Env."
def __init__(self, parms=(), args=(), outer=None):
self.update(zip(parms,args))
self.outer = outer
def find(self, var):
"Find the innermost Env where var appears."
return self if var in self else self.outer.find(var)
Затем он продолжает объяснять, почему он делает это, а не просто использует dict. Однако по какой-то причине его объяснение продолжает проходить сквозь мои глаза и выходить из моего затылка.
Почему бы не использовать dict, а затем внутри функции eval, когда должна быть создана новая «подсреда» создан, просто возьмите существующий dict и обновите пары ключ / значение, которые необходимо обновить, и передайте этот новый dict в следующий eval?
Won ' • Интерпретатор Python отслеживает предыдущие «внешние» окружения? И не гарантирует ли природа рекурсии, что значения будут вытянуты из «внутреннего» в «внешнее»?
Я использую Ruby, и я пытался реализовать вещи таким образом. Но что-то не работает, и это может быть из-за этого, а может быть, и нет. Вот моя функция eval, env - это обычный хэш:
def eval(x, env = $global_env)
........
elsif x[0] == "lambda" then
->(*args) { eval(x[2], env.merge(Hash[*x[1].zip(args).flatten(1)])) }
........
end
Строка, которая имеет значение, конечно же, это «лямбда».
Если есть функциональная разница, то что важно различать между тем, что я здесь делаю, и тем, что Norvig делал со своим классом Env? Может ли кто-нибудь описать мне случай, когда они будут отклоняться?
Если нет никакой разницы, то, возможно, кто-нибудь сможет объяснить мне, почему Норвиг использует класс Env. Спасибо : )