وجدت Scala قائمة و seqprojection ، عند الحاجة seq والتعيين

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

  •  26-09-2019
  •  | 
  •  

سؤال

الجلوس مع الخطأ التالي:

TestCaseGenerator.scala:47: error: type mismatch;
 found   : List[(State, Seq.Projection[State])]
 required: Seq[(State, Set[State])]
    new LTS(Map(rndTrans: _*), Map(rndLabeling: _*))
                ^
one error found

لا يمكن معرفة ما يجب فعله حيال ذلك.

ال rndTrans تتم تهيئته على النحو التالي:

val rndTrans = for (s <- (0 to nStates).toList)
                   yield (new State(s) -> (for (s2 <- 0 to nStates
                       if prob(trans_probability))
                           yield new State(s2)))

تحديث: لقد كنت أستخدم الإصدار 2.7.

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

المحلول

عندما toSet الطريقة (أو toMap) غير متوفر (لأن المرء يقوم بتشغيل نسخة أقدم من Scala أو لأن التحويل لم يتم تنفيذه فقط) ، في كثير من الأحيان يمكن للمرء تطبيق أحد المخططات التالية.

val collection: Seq[SomeType] = ...

Set( collection: _* )

أو

Set() ++ collection

يستخدم الإصدار الأول :_* لتحويل المجموعة إلى وسيطة تسلسل ثم يستدعي طريقة مُنشئ لنوع المجموعة الجديد. أنشأت الطريقة الثانية مجموعة فارغة من النوع الجديد ثم تضيف (++) المجموعة القديمة لها.

نصائح أخرى

عموما أ Seq ليس Set. حاول تحويل تسلسل القيمة إلى مجموعة.

val rndTrans = for (s <- (0 to nStates).toList)
                   yield (new State(s) -> (for (s2 <- 0 to nStates
                       if prob(trans_probability))
                           yield new State(s2)).toSet)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top