سؤال

ويمكنني تعيين الصفوف (tuple) كما يلي:

var (min, max) = (1, 2)

ولكن لا أستطيع ثم <م> إعادة تعيين كما يلي

(min, max) = (1, 3) //compiler error: ';' expected but '=' found

وبدلا من ذلك يبدو لي أن لديك للقيام:

min = 1
max = 3

لماذا العمل الأخير في حين أن الأول لا؟

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

المحلول

حسنا، لأنه كان spec'ed الأمر على هذا النحو، وأفترض.

وهذا، الواجب الصفوف (tuple)، هو مثال على نمط مطابقة. نمط مطابقة يحدث في ثلاثة مواضع أن أذكر من:

var PATTERN = ... // or val

for (PATTERN <- ...) ...

case PATTERN => ...

وهكذا كل هذه الحالات العمل:

val l = List((1,'a'), (2,'b'), (3,'c'))
var (n, c) = l(0)
for ((n, c) <- l) println(n+": "+c)
l(1) match {
  case (n, c) => println(n+": "+c)
}

والآن، نأخذ مثالا آخر، واحد باستخدام case. لاحظ أن n وc في هذا المثال هي على لا كما نفس n وc تعريف قليلا في وقت سابق. وانتهت المباراة نمط تعيين القيم إلى <م> الجديد معرفات n وc، والتي سوف الظل التعريف السابق للescope البيان case. وحدث الشيء نفسه على سبيل المثال for، التي لم تتغير n وc تعرف سابقا.

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

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