开发者

Argument type of anonymous function

开发者 https://www.devze.com 2023-03-16 17:50 出处:网络
开发者_Go百科I\'m having some trouble with this code. It\'s supposed to be an OperationTree with Elements BinaryOperations and UnaryOperations.
开发者_Go百科

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 {
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号