2015-07-25 3 views
0

Я просто написал класс Matrix, со следующим constuctor:Scala, типа конструктора Карринга

class Matrix (val dim1: Int)(val dim2: Int, val args: Matrix.IntMode*) 

Итак, я хочу, чтобы получить вектор класс, первое измерение всегда 1, и попробовать что-то вроде этого:

type Vector = Matrix(1) _ 

Но не могу найти правильный способ реализации моей идеи. Я буду признателен за любую помощь с этим

ответ

4

Как о следующем:

class A(val a: Int)(b: Int, c: Int) 
class B(b: Int, c: Int) extends A(1)(b,c) { 
    override def toString = s"$a $b $c" 
} 
val b = new B(3, 4) 
println(b) 

Это производит следующее при запуске в листе Scala:

1 3 4 

я должен был сделать параметр a в a val, поэтому было бы видно, что b для toString

+0

Ваше решение выглядит довольно хорошо, но я надеялся, что я могу найти простой Scala-полосная решение с типов и карри. Во всяком случае, огромное спасибо! – DoSofRedRiver

0

Я бы настоятельно рекомендовал mattinbits решение.

Хотя, если вы не хотите, чтобы определить другой класс, вы могли бы достичь что-то подобное с:

type Vector = Matrix 
object Vector { 
    def apply(dim2: Int, args: Matrix.IntMode*): Vector = new Matrix(1)(dim2, args: _*) 
} 

val myVector = Vector(2, ...) 
+0

Спасибо за ваше решение, сэр! – DoSofRedRiver

Смежные вопросы