استخدام متغيرات الفئة والثوابت في سكالا

StackOverflow https://stackoverflow.com/questions/803206

  •  03-07-2019
  •  | 
  •  

سؤال

وأعمل لتعلم سكالا - قادمة من خلفية C ++. أحاول لكتابة فئة صغيرة لتتبع التطبيق مهمة أنا القرصنة معا ل مساعدتي لمعرفة كيفية رمز سكالا.

وهذا يبدو كما لو أنه ينبغي أن تكون بسيطة ولكن لسبب انها التملص لي:

package com.catenacci.tts

class Task(val ID:Int, val Description:String) {
 val EmptyID = 0
 val EmptyDescription = "No Description"

 def this() = this(EmptyID,EmptyDescription)
 def this(ID:Int)={
   this(ID,EmptyDescription)
 }
 def this(Description:String)={
   this(EmptyID,Description)
 }
}

وأنا أحاول تقديم ثلاثة الصانعين: المهمة (ID، الوصف)، المهمة (ID)، المهمة (الوصف). في 2 الحالات الأخيرة أريد أن تهيئة القيم إلى قيم ثابتة إذا كان أحد القيم ليس قدمت من قبل المتصل. وأريد أن أكون قادرة على التحقق من هذا خارج الطبقة لأغراض اختبار وحدة. لذلك أنا أحسب وضع في اثنين سيكون فال العامة تسمح لي للتحقق من خارج الطبقة لجعل تأكد من أن ولايتي هو ما أتوقع.

ولكن، لسبب ما وهذا الرمز لا ترجمة. أحصل على الخطأ التالي:

error: not found: value EmptyID

و

error: not found: value EmptyDescription

وإذا ما أنا في عداد المفقودين؟ أنا أعمل من خلال "البرمجة في سكالا" لذلك إذا كان هناك إجابة بسيطة على هذا السؤال، من فضلك أعطني الصفحة أعداد. أنا لا أمانع القراءة ولكن تسير وفقا لالتعليمات البرمجية في الصفحة 60 و الصفحة 62، وأنا لا يمكن أن نرى لماذا فشل هذا الرمز.

وانا التخمين لديها ما تفعله مع حقيقة أن هذه هي أساليب البناء والتي ربما فال اثنين لم يتم تهيئة حتى نهاية المنشئات. إذا كان هذا هو الحال هناك بعض طريقة للحصول على تأثير أنا أبحث عنه؟

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

المحلول

ويمكنك تحديد الثوابت في كائن رفيق:

object Task { 
 val EmptyID = 0
 val EmptyDescription = "No Description"
}

وثم الرجوع لهم كما Task.EmptyID وTask.EmptyDescription.

وأعتقد سكالا 2.8 لديها دعم القيم الافتراضية.

نصائح أخرى

وانظر جيرمان للحصول على الجواب. يحدث هذا لأن منشئ هو <م> من الناحية الفنية جزء من نطاق ثابت. وبعبارة أخرى، منشئ لا يمكن الوصول إلى أي أعضاء مثيل لأنه لم يتم إنشاء مثيل حتى الان. أي "أعضاء الفئة" هي في الواقع أعضاء مثيل، ولهذا السبب لا يعمل التعليمات البرمجية في هذه المسألة. الجواب الألماني على إصلاح هذا عن طريق تحريك القيمتين ذات الصلة في وجوه رفيق، الأمر الذي يجعل فعال منهم أعضاء ثابتة من فئة Task (وليس حقا، ولكن يمكنك التفكير في الأمر بهذه الطريقة).

في "برمجة في سكالا"، انظر القسم 6.7 حيث يتم شرح تسلسل من منشئ المكالمات. يوصف منشئ الأساسي بأنه "نقطة الدخول الواحدة من فئة".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top