Argument type of anonymous function
I'm having some trouble with this code. It's supposed to be an OperationTree with Elements BinaryOperations and UnaryOperations. The method eval does the evaluation and looks up the variables in a map.
Here's the 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]
The Compiler says:
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
Any suggestions??
Thanks!
You have forgotten to actually match something...
Your code:
def eval(v:HashMap[Char,T]):T = {
Necessary code:
def eval(v:HashMap[Char,T]):T = v match {
精彩评论