E180: Ambiguous Extension Method
This error occurs when multiple extension methods with the same name are applicable to a type and the compiler cannot determine which one to use.
When multiple extension methods from different imports are both valid for a receiver type, the call is ambiguous and the compiler reports this error.
Note: This error is always reported as a nested error inside E008 (Not Found Error) because extension method resolution failures are wrapped in member lookup errors. The E180 message appears in the detailed error explanation.
Example
object Ext1:
extension (i: Int)
def wow: Unit = println(i)
object Ext2:
extension (i: Int)
def wow: Unit = println(i * 2)
def example(): Unit =
import Ext1.wow
import Ext2.wow
5.wow // error: ambiguous extension methods
Error
When compiled, this produces an E008 error with the E180 ambiguous extension method message nested inside:
-- [E008] Not Found Error: example.scala:12:2 ----------------------------------
12 | 5.wow
| ^^^^^
| value wow is not a member of Int.
| An extension method was tried, but could not be fully constructed:
|
| Ext2.wow(5)
|
| failed with:
|
| Ambiguous extension methods:
| both Ext2.wow(5)
| and Ext1.wow(5)
| are possible expansions of 5.wow
Solution
Disambiguate by using a qualified name:
object Ext1:
extension (i: Int)
def wow: Unit = println(i)
object Ext2:
extension (i: Int)
def wow: Unit = println(i * 2)
def example(): Unit =
import Ext1.wow
import Ext2.wow
Ext1.wow(5) // explicitly call Ext1's version
Or import only one extension method:
object Ext1:
extension (i: Int)
def wow: Unit = println(i)
object Ext2:
extension (i: Int)
def wow: Unit = println(i * 2)
def example(): Unit =
import Ext1.wow // only import Ext1's extension
5.wow // unambiguous
In this article