Scala class and arguments
原创转载请注明出处:http://agilestyle.iteye.com/blog/2333082
Class
package org.fool.scala.classes class Giraffe class Bear class Hippo object Animals extends App { val giraffe1 = new Giraffe val giraffe2 = new Giraffe val bear = new Bear val hippo = new Hippo println(giraffe1) println(giraffe2) println(bear) println(hippo) }
Console Output
Class Arguments
package org.fool.scala.classes class ClassArg1(a: Int) { println(f) def f(): Int = a * 10 } /* 如果希望a在类体的外部也是可见的,那么需要将其定义为参数列表中的var或val */ class ClassArg2(var a: Int) class ClassArg3(val a: Int) object ClassArg extends App { val c1 = new ClassArg1(10) // c1.a // error val c2 = new ClassArg2(20) val c3 = new ClassArg3(30) println(c2.a) println(c3.a) c2.a = 40 // c3.a = 50 // error println(c2.a) println(c3.a) }
Console Output
Multiple Class Arguments
package org.fool.scala.classes class Sum3(a1: Int, a2: Int, a3: Int) { def result(): Int = a1 + a2 + a3 } object MultipleClassArgs extends App { println(new Sum3(1, 2, 3).result()) }
Console Output
Variable Class Arguments
package org.fool.scala.classes class Sum(args: Int*) { def result(): Int = { var total = 0 for (n <- args) { total += n } total } } object VariableClassArgs extends App { println(new Sum(1, 3, 5).result()) println(new Sum(1, 3, 5, 7, 9).result()) }
Console Output
Named Arguments
package org.fool.scala.classes class Color(red: Int, blue: Int, green: Int) object NamedArgs extends App { new Color(red = 1, blue = 2, green = 3) new Color(1, 2, green = 3) new Color(1, blue = 2, 3) }
Named And Default Arguments
package org.fool.scala.classes class Color2(red: Int = 100, blue: Int = 100, green: Int = 100) object NamedAndDefaultArgs extends App { new Color2(1) new Color2(1, 2) new Color2(blue = 2) new Color2(red = 1, green = 3) }
Note
Named and default arguments currently have an idiosyncrasy when combined with a variable argument list - you cannot vary the order of the named arguments from their definition
package org.fool.scala.classes class Family(mom:String, dad:String, kids:String*) object NamedAndVariableArgs extends App { new Family(mom="Mom", dad="Dad") // Doesn't work // new Family(dad="Dad", mom="Mom") new Family(mom="Mom", dad="Dad", kids="Hello", "World") // Doesn't work // new Family(dad="Mom", mom="Dad", kids="Hello", "World") }