Перегрузка конструктора Scala?
59150 просмотра
6 ответа
Как вы предоставляете перегруженные конструкторы в Scala?
Автор: Landon Kuhn Источник Размещён: 30.10.2019 06:55Ответы (6)
181 плюса
Стоит прямо упомянуть, что вспомогательные конструкторы в Scala должны либо вызвать первичный конструктор (как в landon9720), либо другой вспомогательный конструктор из того же класса, что и их первое действие. Они не могут просто вызывать конструктор суперкласса явно или неявно, как в Java. Это гарантирует, что основной конструктор является единственной точкой входа в класс.
class Foo(x: Int, y: Int, z: String) {
// default y parameter to 0
def this(x: Int, z: String) = this(x, 0, z)
// default x & y parameters to 0
// calls previous auxiliary constructor which calls the primary constructor
def this(z: String) = this(0, z);
}
Автор: Jon McAuliffe
Размещён: 08.07.2009 07:10
32 плюса
class Foo(x: Int, y: Int) {
def this(x: Int) = this(x, 0) // default y parameter to 0
}
Автор: Landon Kuhn
Размещён: 07.07.2009 11:16
15 плюса
Начиная с Scala 2.8.0, вы также можете иметь значения по умолчанию для параметров contructor и метода. Нравится
scala> class Foo(x:Int, y:Int = 0, z:Int=0) {
| override def toString() = { "Foo(" + x + ", " + y + ", " + z + ")" }
| }
defined class Foo
scala> new Foo(1, 2, 3)
res0: Foo = Foo(1, 2, 3)
scala> new Foo(4)
res1: Foo = Foo(4, 0, 0)
Параметры со значениями по умолчанию должны идти после тех, у которых нет значений по умолчанию в списке параметров.
Автор: Jörgen Lundberg Размещён: 12.12.2010 01:319 плюса
Глядя на мой код, я внезапно осознал, что перегружаю конструктор. Затем я вспомнил этот вопрос и вернулся, чтобы дать другой ответ:
В Scala вы не можете перегружать конструкторы, но вы можете сделать это с помощью функций.
Кроме того, многие решили сделать apply
функцию объекта-компаньона фабрикой для соответствующего класса.
Делая этот класс абстрактным и перегружая apply
функцию для реализации-реализации этого класса, у вас есть перегруженный «конструктор»:
abstract class Expectation[T] extends BooleanStatement {
val expected: Seq[T]
…
}
object Expectation {
def apply[T](expd: T ): Expectation[T] = new Expectation[T] {val expected = List(expd)}
def apply[T](expd: Seq[T]): Expectation[T] = new Expectation[T] {val expected = expd }
def main(args: Array[String]): Unit = {
val expectTrueness = Expectation(true)
…
}
}
Обратите внимание, что я явно определяю каждый из них, apply
чтобы он возвращал Expectation[T]
, иначе он вернул бы тип с уткой Expectation[T]{val expected: List[T]}
.
1 плюс
Я подумал, что Scala Constructors (2008-11-11) может добавить больше информации.
Автор: asyncwait Размещён: 01.06.2012 12:520 плюса
Попробуй это
class A(x: Int, y: Int) {
def this(x: Int) = this(x, x)
def this() = this(1)
override def toString() = "x=" + x + " y=" + y
class B(a: Int, b: Int, c: String) {
def this(str: String) = this(x, y, str)
override def toString() =
"x=" + x + " y=" + y + " a=" + a + " b=" + b + " c=" + c
}
}
Автор: anish
Размещён: 31.03.2014 05:02
Вопросы из категории :
- scala Есть ли реальный опыт использования программной транзакционной памяти?
- scala Преобразование коллекции Java в коллекцию Scala
- scala Что означает один апостроф в Scala?
- scala Самый масштабируемый веб-стек для высокопроизводительного приложения Flash / Flex / AIR?
- scala Разбиение макета Scala на инфиксном операторе
- scala Как мне обойти стирание типа на Scala? Или, почему я не могу получить параметр типа моих коллекций?
- scala Перегрузка конструктора Scala?
- scala Scala-эквивалент Java java.lang.Class <T> Object
- scala Синтаксис Скала точка (или его отсутствие)
- scala Предпочтительный способ создания списка Scala
- scala Прочитать весь файл в Scala?
- scala Увеличить размер кучи JVM для Scala?
- scala Какие веб-фреймворки Scala доступны?
- scala Использование операторов сравнения в системе сопоставления с образцом Scala
- scala Разница между объектом и классом в Scala
- scala Как разрешить java.nio.charset.UnmappableCharacterException в Scala 2.8.0?
- scala В чем разница между определениями var и val в Scala?
- scala Как вы определяете тип для функции в Scala?
- scala Как преобразовать X => Option [R] в PartialFunction [X, R]
- scala Возможно ли использовать Spring MVC с Groovy или Scala?