You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Jonathan edited this page Aug 8, 2021
·
2 revisions
Firefly supports multi-dispatch through @MultiDispatch annotation. By annotation functions with this annotation, you inform the compiler to generate switch-case branches, which selects the correct function to handle the invocation, for example:
@MultiDispatch
fun print(o: Any) {
println("Printing any: $o")
}
@MultiDispatch
fun print(o: String) {
println("Printing string: $o")
}
@MultiDispatch
fun print(o: List<Int>) {
println("Printing List<Int>: $o")
}
fun main(args) {
val str: Any = "A"
val int: Any = 9
val intList = List<Int>(0, 1, 2)
print(str) // Printing string: A
print(int) // Printing any: 9
print(intList) // Printing List<Int>: [0, 1, 2]
}
Compiler does that by generating switch-case branches inside the annotated function, but can use invokedynamic for this kind of invocation when --multi-dispatch-with-invoke-dynamic=true is set.