2011-07-02 38 views
8

Tôi gặp sự cố với mã này. Nó được coi là một OperationTree với Elements BinaryOperations và UnaryOperations. Phương pháp eval thực hiện đánh giá và tìm kiếm các biến trong bản đồ.Loại đối số của hàm ẩn danh

Dưới đây là đoạn code

1 import collection.immutable.HashMap 
    2 sealed abstract class OpTree[T]{ 
    3 
    4 def eval(v:HashMap[Char,T]):T = { 
    5  case Elem(x) => x 
    6  case UnOp(f,c) => { 
    7  f(c.eval(v)) 
    8  } 
    9  case BinOp(f,l,r) => { 
10  f(l.eval(v),r.eval(v)) 
11  } 
12  case Var(c) => { 
13  v.get(c) 
14  } 
15 } 
16 } 
17 //Leaf 
18 case class Elem[T](elm:T) extends OpTree[T] 
19 //Node with two sons 
20 case class UnOp[T](f:T => T, child:OpTree[T]) extends OpTree[T] 
21 //Node with one son 
22 case class BinOp[T](f:(T,T) => T, left:OpTree[T], right:OpTree[T]) extends OpTree[T] 
23 case class Var[T](val c:Char) extends OpTree[T] 

Các trình biên dịch nói:

OpTree.scala:4: error: missing parameter type for expanded function 
The argument types of an anonymous function must be fully known. (SLS 8.5) 
Expected type was: T 
    def eval(v:HashMap[Char,T]):T = { 
           ^
one error found 

Mọi góp ý ??

Cảm ơn!

+0

Nó sẽ giúp để biết được nơi dòng 4 thực sự là trong đoạn Bạn đã đăng. –

+0

của nó: def eval (v: HashMap [Char, T]): T = { – xyz

Trả lời

21

Bạn đã quên để thực sự phù hợp với một cái gì đó ...

Mã của bạn:

def eval(v:HashMap[Char,T]):T = { 

mã cần thiết:

def eval(v:HashMap[Char,T]):T = v match { 
+0

Oh thật ngu ngốc ... cảm ơn! – xyz

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