scala> //Special Call forms #194
scala> //Example 1 : Repeated Parameters
scala> def demo(args: String*) = {
     |    for(arg <- args) {
     |       println("arg -> " + arg)
     |    }
     | }
demo: (args: String*)Unit
scala>
scala> demo("this", "is", "scala")
arg -> this
arg -> is
arg -> scala
scala>
scala> //Passing an array will give compilation error
scala> val arr = Array("This", "is", "scala")
arr: Array[String] = Array(This, is, scala)
scala> demo(arr)
<console>:13: error: type mismatch;
 found   : Array[String]
 required: String
              demo(arr)
                   ^
scala>
scala> //But, Array can be passed like this
scala> demo(arr: _*)
arg -> This
arg -> is
arg -> scala
scala>
scala>
scala> //Example 2 : Named arguments
scala> def fn1(firstArg: String, secondArg: String) = {
     |    println("firstArg -> " + firstArg + ", secondArg -> "
     |                                        + secondArg)
     | }
fn1: (firstArg: String, secondArg: String)Unit
scala>
scala> fn1(secondArg = "scala", firstArg = "hello")
firstArg -> hello, secondArg -> scala
scala>
scala> //Example 3 : Defaul Parameter Values
scala> def fn2(firstArg: String = "HELLO", secondArg: String) = {
     |    println("firstArg -> " + firstArg + ", secondArg -> "
     |                                        + secondArg)
     | }
fn2: (firstArg: String, secondArg: String)Unit
scala>
scala> fn2(secondArg = "Scala")
firstArg -> HELLO, secondArg -> Scala