Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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!

like image 777
xyz Avatar asked Jul 02 '11 11:07

xyz


1 Answers

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 {
like image 91
agilesteel Avatar answered Nov 09 '22 23:11

agilesteel