سكالا تسطير استخدام لتبسيط بناء الجملة من الحرفية وظيفة
-
12-11-2019 - |
سؤال
لدي الكود التالي:
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)
لا تنتمي إلى StackOverflow