내 응용 프로그램에서 일부 "데이터"ValueCell
(20과 비슷한)을 사용하고 ValueCell
을 만들어 내 "데이터"가 ValueCell
인 경우 검색하는 데 사용하고 싶습니다. 그래서 다른 셀 중 하나가 변경 될 때마다이 셀을 변경하고 싶습니다. 여기 Liftweb - 여러 ValueCell 상태 변경
class StringFilter {
val referenceList = "foo"::"bar"::"scala"::"lift"::Nil
val length = ValueCell[Int](3)
val content = ValueCell[String]("")
//Here I put some functions to update length or prefix on my webpage
def filter(s:String):Boolean = (s.length==length.get)&&(s.contains(content.get))
val changed =ValueCell[???](???)
val results= changed.lift(referenceList.filter)
}
은 내가 대신 ???
의 놓아야 간단한 코드 예제입니다? ValueCell을 사용하지 않는 솔루션에 대해서도 열려 있습니다. 결국 WiringUI를 사용해야하므로 결국에는 일부 셀이 필요할 것입니다.
편집 : 내가 아이디어에 와서 좀 더 조사 후 :하십시오 case class
같은 SeqCell
만 구현하는 것이라고
편집length
및 content
세포가 될 필요는 없지만 그들이 설정 가능해야 매개 변수의 셀 및 임의의 수의 셀에 대해 형식을 사용하지 않습니다. 가능한가?
여기 SeqCell
의 구현 :
final case class SeqCell[T](cells: Cell[T]*) extends Cell[Seq[T]] {
cells.foreach(_.addDependent(this))
/**
* The cell's value and most recent change time
*/
def currentValue: (Seq[T], Long) = {
val tcv = cells.map(_.currentValue)
tcv.map(_._1) -> tcv.foldLeft(0L)((max, c) => if (max > c._2) max else c._2)
}
/**
* If the predicate cell changes, the Dependent will be notified
*/
def predicateChanged(which: Cell[_]): Unit = notifyDependents()
}
편집 : 스칼라 Cell
에서이 covariant하지, 그래서 내 여러 입력 세포 밖으로 SeqCell
을 할 수 없습니다 것 같다. 셀의 임의의 수에 대한 글로벌 솔루션을 정말 고맙게 생각합니다.
감사합니다. 그러나이 솔루션을 임의의 수의 셀로 사용할 수는 없지만 SeqCell (cells : Cell [T] *) 나는 그것을 사용하는 방법을 모른다. (실제로'*'가 무엇을 의미하는지 모르며, 검색 엔진에서 확인하기가 어렵다.) –
'*'는 당신이 할 수 있다는 것을 의미한다. 'cells' 인수 대신 쉼표로 구분 된 임의의 수의 인수를 입력하십시오. "varArgs"를 사용하면 더 나은 검색 결과를 얻을 수 있다고 생각합니다. 'SeqCell'의 한계는 각 셀이 같은 타입 ('T')이어야한다는 것입니다. 조금 더러울 수도 있지만, 당신은 언제나 Tuples의 셀에 당신의 주장을 응축시킬 수 있습니다. 예 : 셀 A와 셀 B를 가지고 있다면, FuncCell (aCell, bCell) {(a, b) => a-> b}' – Dylan
으로 결합 할 수 있습니다. 나는 내 문제를 해결할 수있다. 그러나 나는 "varArgs"가 무엇을 의미하는지, 어떻게 사용하는지 이해하지 못합니다. 예를 들어 줄 수 있습니까? –