yarinb
yarinb

Reputation: 191

Passing function to overloaded method in Scala

I've hit an interesting issue with passing function references to overloaded methods in Scala (Using 2.11.7)

The following code works as expected

def myFunc(a: Int, b: String): Double = {
  a.toDouble + b.toDouble
}


def anotherFunc(value: String, func: (Int, String) => Double) = {
  func(111, value)
}

anotherFunc("123123", myFunc)

But the following code doesn't compile

def myFunc(a: Int, b: String): Double = {
  a.toDouble + b.toDouble
}


def anotherFunc(value: String, func: (Int, String) => Double) = {
  func(111, value)
}

def anotherFunc(value: Int, func: (Int, String) => Double) = {
  func(value, "123123")
}

anotherFunc("123123", myFunc)

Compiler shouts the following

scala> anotherFunc("123123", myFunc)
<console>:13: error: type mismatch;
 found   : String("123123")
 required: Int
       anotherFunc("123123", myFunc)

Upvotes: 1

Views: 120

Answers (2)

Nabil A.
Nabil A.

Reputation: 3400

I don't know the reason but seems you have to write

anotherFunc("123123", myFunc _)

to make it work.

Upvotes: 1

Piotr Rudnicki
Piotr Rudnicki

Reputation: 434

Are you using Scala REPL? One of it's design decisions is that if you have two variables/functions with the same name defined then "last defined wins". In your case it is a function with Int parameter.

You can print all defined symbols in REPL using:

$intp.definedTerms.foreach(println)

Here someone had similar question: Why its possible to declare variable with same name in the REPL?

Upvotes: 2

Related Questions