Попробуйте использовать .live()
вместо .bind()
; .live()
свяжет .hover
с вашим флажком после выполнения запроса Ajax.
Этот тип задачи лучше всего выполнять с (хвостовой) рекурсией (также никогда не используйте var
, если вы не полностью уверены, что вам это нужно ... а также, null
также чего следует избегать, используйте вместо этого Option
):
case class Node[A](value: A, next: Option[Node[A]]) {
@tailrec
final def calleachnode(f: A => Unit): Unit = {
f(value)
next match {
case Some(next) => next.calleachnode(f)
case None => ()
}
}
}
Вот 3 возможности, которые используют Algebraic Data Types (ADT)
.
Сначала object-oriented
:
sealed trait LinkedListNode[A] {
def calleachnode(inputfunction : A => Unit): Unit
}
case class BranchNode[A](value:A, next: LinkedListNode[A]) extends LinkedListNode[A] {
def calleachnode(inputfunction : A => Unit): Unit = {
inputfunction(value)
next.calleachnode(inputfunction)
}
}
case class LeafNode[A](value:A) extends LinkedListNode[A] {
def calleachnode(inputfunction : A => Unit): Unit = {
inputfunction(value)
}
}
Или, если вы предпочитаете, вы можете использовать сопоставление с образцом:
sealed trait LinkedListNode[A] {
def calleachnode(inputfunction : A => Unit): Unit = this match {
case BranchNode(value, next) =>
inputfunction(value)
next.calleachnode(inputfunction)
case LeafNode(value) =>
inputfunction(value)
}
}
case class BranchNode[A](value:A, next: LinkedListNode[A]) extends LinkedListNode[A]
case class LeafNode[A](value:A) extends LinkedListNode[A]
Вы можете проверить эти решения с помощью:
[112 ] Теперь более functional
способ использовать ADT
:
sealed trait LinkedListNode[A]
case class BranchNode[A](value:A, next: LinkedListNode[A]) extends LinkedListNode[A]
case class LeafNode[A](value:A) extends LinkedListNode[A]
def calleachnode[A](listNode: LinkedListNode[A], inputfunction : A => Unit): Unit = listNode match {
case BranchNode(value, next) =>
inputfunction(value)
calleachnode(next, inputfunction)
case LeafNode(value) =>
inputfunction(value)
}
Тест выглядит немного иначе:
val lln = BranchNode(12, LeafNode(2))
calleachnode[Int](lln, (i) => println(i * 2))