原创转载请注明出处: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")
}
本文深入探讨Scala中类的创建、多种参数形式及其使用方式,包括固定参数、可变参数、命名参数及默认参数等,通过具体示例帮助读者理解Scala类的构造过程。
414

被折叠的 条评论
为什么被折叠?



