Результат Objective-C из статического метода, сохраненный в переменной экземпляра класса с указанием «EXC_BAD_ACCESS» при использовании

Я пытаюсь сохранить строку 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. Спасибо : )

7
задан MikeC8 12 January 2011 в 05:05
поделиться