У меня есть класс, который выглядит следующим образом:Создания произвольного класса
class EpidemySimulator extends Simulator {
...
class Person{
// Implementation
}
}
Я хочу добавить Произвольный внутренний класс лиц, так что я могу определить некоторые свойства класса EpidemySimulator. Я думал, что объект-компаньон может определить необходимые неявные генераторы, необходимые для определения свойств, которые будут генерировать объекты типа Person.
object EpidemySimulator
{
implicit def arbPerson(implicit sim: EpidemySimulator) =
Arbitrary(for(n <- Gen.choose(1, roomRows * roomColumns))yield{ new sim.Person(n) })
def propertyOne(sim: EpidemySimulator) = forAll { person: sim.Person =>
person.row > 0 && person.row < roomRows && person.col > 0 && person.col < roomColumns
}
}
Мое понимание было то, что, если я предоставил неявную функцию, которая создает Arbitrary[sim.Person]
данный конкретный sim:EpidemySimulator
(который предоставляется неявно), то я должен быть в состоянии создать свойство, как и в propertyOne
. Однако я получаю ошибку компилятора на свойстве, которое говорит
Multiple markers at this line
- identifier expected but ';' found.
- not enough arguments for method forAll: (implicit p: Boolean => org.scalacheck.Prop, implicit a1: org.scalacheck.Arbitrary[sim.Person],
implicit s1: org.scalacheck.Shrink[sim.Person], implicit pp1: sim.Person => org.scalacheck.Pretty)org.scalacheck.Prop. Unspecified value parameters
a1, s1, pp1.
- could not find implicit value for parameter a1: org.scalacheck.Arbitrary[sim.Person]
- type <error> is not a member of simulations.EpidemySimulator
Любые идеи, что я делаю неправильно. Я хочу, чтобы иметь возможность в конечном счете:
class EpidemySuite extends FunSuite with Checkers {
test("EpidemySimulator fulfills property one"){
val es = new EpidemySimulator
check(EpidemySimulator.propertyOne(sim))
}
}
Большое спасибо ... я понимаю, что я сделал не так ... –