سؤال

في Scala 2.8 هل هناك طريقة للتزيين منشئين من فئة الحالة؟

إذا كانت الإجابة بنعم، يرجى وضع مقتطف لشرح، إن لم يكن، يرجى توضيح السبب؟

هل كانت مفيدة؟

المحلول

منشئ التحميل الزائد ليس خاصا لفئات الحالة:

case class Foo(bar: Int, baz: Int) {
  def this(bar: Int) = this(bar, 0)
}

new Foo(1, 2)
new Foo(1)

ومع ذلك، قد ترغب أيضا في التحميل apply الطريقة في كائن المصاحب، والتي يتم استدعاءها عند حذفت new.

object Foo {
  def apply(bar: Int) = new Foo(bar)
}

Foo(1, 2)
Foo(1)

في SCALA 2.8، يمكن استخدام المعلمات المسماة والإفتراضية بدلا من التحميل الزائد.

case class Baz(bar: Int, baz: Int = 0)
new Baz(1)
Baz(1)

نصائح أخرى

يمكنك تحديد منشئ مكتمل بالطريقة المعتادة، ولكن لاستدعاءها عليك استخدام الكلمة الأساسية "الجديدة".

scala> case class A(i: Int) { def this(s: String) = this(s.toInt) }
defined class A

scala> A(1)
res0: A = A(1)

scala> A("2")
<console>:8: error: type mismatch;
 found   : java.lang.String("2")
 required: Int
       A("2")
         ^

scala> new A("2")
res2: A = A(2)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top