تحويل التعداد إلى مكرر
-
20-08-2019 - |
سؤال
ولدي التحويل الضمني التالية لjava.util.Enumerations
implicit def enumerationIterator[A](e : Enumeration[A]) : Iterator[A] = {
new Iterator[A] {
def hasNext = e.hasMoreElements
def next = e.nextElement
def remove = throw new UnsupportedOperationException()
}
}
ومما يؤسف له أنه لا يعمل لZipFile.entries
لأنه بإرجاع Enumeration<? extends ZipEntry>
(انظر ذات الصلة السؤال ) وScalac تبقي تقول لي
type mismatch; found : java.util.Iterator[?0]
where type ?0 <: java.util.zip.ZipEntry
required: Iterator[?]
وأنا لا يمكن معرفة كيفية جعل عمل محادثة في لك شيء. مثل
List.fromIterator(new ZipFile(z).entries))
المحلول
وList.fromIterator تتوقع scala.Iterator الخاصة بك ولكن ضمنيا يعود لjava.util.Iterator.
وهذا يعمل
import java.util.Enumeration
implicit def enum2Iterator[A](e : Enumeration[A]) = new Iterator[A] {
def next = e.nextElement
def hasNext = e.hasMoreElements
}
import java.util.zip.{ZipFile, ZipEntry}
val l = List.fromIterator(new ZipFile(null:java.io.File).entries)
وإضافة استيراد واحد في الجزء العلوي يمنع تجميع
import java.util.Iterator
وكان هناك بعض النقاش حول توحيد سكالا وجافا في 2.8 فقط باستخدام java.util.Iterator. على الجانب السلبي، مكرر جافا لديه وسيلة إزالة التي لا معنى لمجموعات ثابتة سكالا. UnsupportedOperationException؟ BLECH! على الجانب الايجابي الذي يجعل مثل هذه الاشياء الخطأ يذهب بعيدا.
وتحرير: واضاف لقد القضية تراك أن رسالة الخطأ كان يمكن أن يكون أكثر وضوحا كان ذلك قال "المطلوبة: [؟] scala.Iterator" <لأ href = "https://lampsvn.epfl.ch/trac/ سكالا / تذكرة / 2102 "يختلط =" نوفولو noreferrer "> https://lampsvn.epfl.ch/trac/scala/ticket/2102
نصائح أخرى
وبقدر ما أعرف، التعداد في سكالا 2.7.x له "عناصر" طريقة وسكالا 2.8.0 لديه "مكرر" طريقة عودتهم مكرر. لماذا لم تستخدمها؟
وأوه، لا يهم، لا يهم. جافا م> التعداد.