Skip to content

Instantly share code, notes, and snippets.

@bmc
Created September 2, 2011 15:08
Show Gist options
  • Save bmc/1188867 to your computer and use it in GitHub Desktop.
Save bmc/1188867 to your computer and use it in GitHub Desktop.
Scala compiler oddity #1
// So, given this declaration:
import java.io.File
val scalaDirs = new File("target").listFiles.filter(_.getName.startsWith("scala"))
// Why does this work:
scalaDirs.take(1).map(new File(_, "classes")).toList(0)
// but this fails to compile?
scalaDirs.take(1).map(new File(_, "classes")).toArray(0)
// <console>:15: error: type mismatch;
// found : Int(0)
// required: scala.reflect.ClassManifest[?]
// res8.take(1).map(new File(_, "classes")).toArray(0)
// This also fails to compile, though the error is slightly different:
scalaDirs.take(1).map(new File(_, "classes"))(0)
// <console>:15: error: type mismatch;
// found : Int(0)
// required: scala.collection.generic.CanBuildFrom[Array[java.io.File],java.io.File,?]
// res8.take(1).map(new File(_, "classes"))(0)
// ... even though
scalaDirs.take(1).map(new File(_, "classes"))
// is of type Array[File]
@alxbok
Copy link

alxbok commented Sep 2, 2011

I disagree with that post of Mr. Pollak. And if you compare Scala with C++ or say C++0x it is not that hard after all...
And here some stuff for those who say Java is simple: http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html After studying this nice tutorial carefully, which I do strongly recommend, they might come up with "Java is too complex". Hard things are hard and simple things are simple, that is what you try to say - this is a tautology.

@bmc
Copy link
Author

bmc commented Sep 2, 2011

I think you'll find that Josh and I agree with you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment