Как правило, если у Вас нет закрытий, нужно определить класс, чтобы нести с ним эквивалент среды закрытия и раздать его.
, Например, на языке как Lisp, можно определить функцию, которая возвращает функцию (с закрытым - по среде) для добавления некоторой предопределенной суммы к ее аргументу таким образом:
(defun make-adder (how-much)
(lambda (x)
(+ x how-much)))
и использование это как это:
cl-user(2): (make-adder 5)
#<Interpreted Closure (:internal make-adder) @ #x10009ef272>
cl-user(3): (funcall * 3) ; calls the function you just made with the argument '3'.
8
На языке без закрытий, Вы сделали бы что-то вроде этого:
public class Adder {
private int howMuch;
public Adder(int h) {
howMuch = h;
}
public int doAdd(int x) {
return x + howMuch;
}
}
и затем используют его как это:
Adder addFive = new Adder(5);
int addedFive = addFive.doAdd(3);
// addedFive is now 8.
закрытие неявно несет свою среду с ним; Вы беспрепятственно обращаетесь к той среде из выполняющейся части (лямбда). Без закрытий необходимо сделать ту среду явной.
, Который должен объяснить Вам, когда Вы использовали бы закрытия: все время . Большинство экземпляров, где класс инстанцируют, чтобы нести с ним некоторое состояние от другой части вычисления и применить его в другом месте, изящно заменяется закрытиями на языках, которые поддерживают их.
можно реализовать объектную систему с закрытиями.
Хорошо, я понял.
Я установил Eclipse Classic, и он мне не понравился. С тех пор я удалил классический и установил «Eclipse Java EE», и обновление сработало.
Looks like your eclipse mirror was corrupt. Use another one.
У меня была та же проблема, что было исправлено, так это изменение системы обновления, которую использовал Eclipse. Я использую Eclipse 3.5, а система обновления по умолчанию - P2 ( http://wiki.eclipse.org/Equinox_p2_Getting_Started ). Попробуйте войти в Prefereces-> General-> Capabilities-> установите флажок рядом с Classic Update. Это исправило это для меня.