scala> def orderBigMacMenu(drink: String = "Coke", withMayo: Boolean = true): String = {
| /** the meal gets prepared **/
| "You ordered BigMac menu with " + drink + (if (withMayo) " with " else " without ") + "mayonaise"
| }
orderBigMacMenu: (drink: String, withMayo: Boolean)String
scala>
scala>
scala> orderBigMacMenu("drinkA", false)
res4: String = You ordered BigMac menu with drinkA without mayonaise
scala> orderBigMacMenu("drinkB", true)
res5: String = You ordered BigMac menu with drinkB with mayonaise
/** code below works because compiler tries to use arguments provided from left to right
and "drinkc" is of type String **/
scala> orderBigMacMenu("drinkC")
res6: String = You ordered BigMac menu with drinkC with mayonaise
/** code below fails because compiler tries to use arguments provided from left to right
and "true" is of type Boolean **/
scala> orderBigMacMenu(true)
:9: error: type mismatch;
found : Boolean(true)
required: String
Error occurred in an application involving default arguments.
orderBigMacMenu(true)
/** When using named arguments, there is no issue. You can even swap them around if you want to. **/
scala> orderBigMacMenu(withMayo=false)
res8: String = You ordered BigMac menu with Coke without mayonaise
scala> orderBigMacMenu(withMayo=false, drink="Beer")
res9: String = You ordered BigMac menu with Beer without mayonaise
Saturday, May 26, 2012
Using named and default arguments
This time I inlined some comments in REPL output just in case you wondered how that got there.
Labels:
Scala
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment