2016-09-28 4 views
0

Я хотел бы определить свои тесты с помощью следующей функции (игнорировать некоторые зависимости для в настоящее время, например, fixture1 и т.д., они находятся в самом низу):Как связать аргументы функции в Scala?

multiTest("my test name", fixture1) { case (x: Double, y: Int, z: String) => 
    // test body 
} 

и multiTest определяются в моей базе пользовательских FunSpecLike подкласса как:

def multiTest(testName: String, fixture: FixtureTable)(fun: => Unit)(implicit pos: source.Position): Unit = { 
    val heading = fixture.heading 
    fixture.values.foreach { tuple => 
     it(autoGenerateDesc(heading, tuple)) { 
      fun tuple // <<<<<< how can I pass the tuple to the definition above? 
     } 
    } 
} 

Как я могу наложить кортеж на функцию?

Некоторые из недостающих частей являются:

case class FixtureTable(heading: Map[String, String], values: Seq[Any]) 
// tableFor generates the permutations of all paramater values 
val fixture1 : FixtureTable = tableFor(
    ("x", List(1e-1, 1e-2)), 
    ("y", List(1, 2, 3)), 
    ("z", List("a", "b"))) 
+0

это ответ на ваш вопрос? http://stackoverflow.com/questions/1987820/how-to-apply-a-function-to-a-tuple –

+0

Не знаете, как ... вы можете дать ответ? –

ответ

1

Как это, вы не можете. Изменение multitest в

def multiTest(testName: String, fixture: FixtureTable)(fun: Any => Unit)(implicit pos: source.Position): Unit = { 
    val heading = fixture.heading 
    fixture.values.foreach { tuple => 
     it(autoGenerateDesc(heading, tuple)) { 
      fun(tuple) 
     } 
    } 
} 

или даже лучше

case class FixtureTable[A](heading: Map[String, String], values: Seq[A]) 
def multiTest[A](testName: String, fixture: FixtureTable[A])(fun: A => Unit)(implicit pos: source.Position): Unit = { 
    val heading = fixture.heading 
    fixture.values.foreach { tuple => 
     it(autoGenerateDesc(heading, tuple)) { 
      fun(tuple) 
     } 
    } 
} 

, но это было бы труднее писать tableFor функции для этого случая.

+0

Отлично, большое вам спасибо! –