سؤال

لدي الكود التالي:

var x = Array(1,3,4,4,1,1,3)
var m = Int.MaxValue
x.foreach((x)=>(m = m min x))

حاولت تبسيط الجملة الأخيرة إلى:

x.foreach((m = _ min m))

لكن المترجم يقول:

scala>  x.foreach((m = _ min m))     
<console>:8: error: missing parameter type for expanded function ((x$1) => x$1.min(m))
    x.foreach((m = _ min m))
                   ^

حاولت أن أكون أكثر وضوحا بشأن النوع:

scala>  x.foreach((m = (_:Int) min m))
<console>:8: error: type mismatch;
found   : (Int) => Int
required: Int
    x.foreach((m = (_:Int) min m))
                           ^

المترجم وأنا لا أفهم بعضنا البعض :(

مع أطيب التحيات,

ستان

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

المحلول

أولا ، لاحظ أن

val m = x.min

هل ما تريد ، كما يفعل

val m = (Int.MaxValue /: x)(_ min _)

سأترك الأمر لك لقراءة المزيد عن هذه الأشياء (الطريقة الدقيقة في المجموعات والطيات;لاحظ أن هذه ليست بالسرعة التي كتبتها).

المشكلة هي أن المترجم يضيع مع ما تعنيه ومع ما قد تكون أنواع صالحة عند كتابة تسطير أسفل السطر ، وعند إضافة معلومات النوع فإنه يعتقد أنك تحاول كتابة وظيفة هناك حق وتعيينه إلى m.لكن بالطبع m هو Int, ، ليست وظيفة ، لذلك يشكو.

فقط اكتبها صراحة.انها فقط عدد قليل من الشخصيات الإضافية:

x.foreach(i => m = m min i)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top