2012-03-15 20 views
7

Tại sao mã này lại ném ngoại lệ?Ngoại lệ trong scala khi xác định phương thức toInt của riêng tôi

val x = new { def toInt(n: Int) = n*2 } 
x.toInt(2) 
scala.tools.nsc.symtab.Types$TypeError: too many arguments for method toInteger: (x$1: java.lang.Object)java.lang.Integer 
     at scala.tools.nsc.typechecker.Contexts$Context.error(Contexts.scala:298) 
     at scala.tools.nsc.typechecker.Infer$Inferencer.error(Infer.scala:207) 
     at scala.tools.nsc.typechecker.Infer$Inferencer.errorTree(Infer.scala:211) 
     at scala.tools.nsc.typechecker.Typers$Typer.tryNamesDefaults$1(Typers.scala:2350) 
     ... 

Tôi đang sử dụng scala 2.9.1.final

+0

Vì đây là lỗi trình biên dịch nên tôi khuyên bạn nên tạo Scala tốt hơn bằng cách gửi báo cáo lỗi trong [Trình theo dõi vấn đề của Scala] (https://issues.scala-lang.org/secure/Dashboard.jspa). – leedm777

+0

Không bị rơi trên thân cây 2.10. – soc

Trả lời

3

Rõ ràng là một lỗi biên dịch (các tai nạn biên dịch, và REPL cho bạn That entry seems to have slain the compiler.). Nó không báo hiệu có gì sai với mã của bạn.

Bạn đang tạo một phiên bản loại AnyRef{def toInt(n: Int): Int}, do đó, tạo đối tượng đơn lẻ như Kyle gợi ý có thể là cách tốt hơn để thực hiện nó. Hoặc tạo một lớp/đặc điểm được đặt tên mà bạn chèn vào, hoạt động tốt.

2

EDIT: Như Luigi Plinge đề nghị, đó là một lỗi biên dịch.

Có lẽ bạn muốn một cái gì đó như thế này ...

object x { 
    def toInt(n:Int) = n * 2 
} 

scala> x.toInt(2) 
res0: Int = 4 
+0

Bạn có ý nghĩa gì bởi "scalas toInt"? new {} không có phương thức toInt mà tôi có thể ghi đè. Chỉ có phương thức toInt mà tôi đã định nghĩa. – SpiderPig

Các vấn đề liên quan