Вопрос на закрытии Scala (От “Программирования в Scala”)

Если Вы возвратите "false" от своей функции, то это остановит распространение событий, поэтому только Ваш первый обработчик событий будет инициирован (т.е. Ваша привязка не будет видеть щелчок).

$("div.clickable").click(
function()
{
    window.location = $(this).attr("url");
    return false;
});

Видят , event.preventDefault () по сравнению с ложью возврата для получения дополнительной информации о возвращают false по сравнению с preventDefault.

8
задан Ekkmanz 5 July 2009 в 04:47
поделиться

1 ответ

Давайте посмотрим на классическое закрытие надстройки из Что такое замыкание .

(define (add a)
  (lambda (b)
    (+ a b)))

(define add3 (add 3))

(add3 4) returns 7

В приведенном выше лямбда-выражении a - это свободная переменная , которая определена в ссылке в Википедии как:

a переменная, на которую ссылается функция это не локальная переменная или аргумент этой функции. Повышение стоимости свободная переменная, которая была связана (закрыто) с закрытием.

Возвращаясь к

def filesEnding(query: String) =
  filesMatching(_.endsWith(query))

Неявная функция x => x.endsWith (query) - это функция первого класса, которой присваивается значение первого класса сопоставитель и _ .ndsWith () закрывается над запросом , аналогично тому, как 3 закрывает a в ( добавить 3) . (add3 4) эквивалент выполняется matcher (file.getName) .

Править : Сложная часть - это функция в Scala, называемая анонимными функциями синтаксиса заполнителя. Используя _ вместо отправителя или параметра, Scala автоматически создает анонимную функцию, которую мы можем рассматривать как лямбда-выражение.

Например,

_ + 1              creates       x => x + 1
_ * _              creates       (x1, x2) => x1 * x2
_.endsWith(query)  creates       x => x.endsWith(query)

Внутри функции x => x.endsWith (query) , query удовлетворяет двум требованиям, чтобы быть свободной переменной:

  1. query не является локальной переменной, определенной в функции (локальной переменной нет).
  2. query не является аргументом функции (единственный аргумент - x ).
17
ответ дан 5 December 2019 в 10:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: