输出中的额外括号使用Scala

时间:2017-03-03 09:38:00

标签: scala

我正在学习Scala并且正在学习基本命令。以下是我的疑惑:

1)在使用println并在语句中调用函数时,它会打印一个额外的"()"在输出中。任何人都可以告诉我为什么会如此。以下是我的代码和输出

我的代码 -

{
private var name : String = s_name
private var grade : String = s_grade
private var marks : Int = s_marks

def getStudent(){
var str = printf("Name :: %s Grade :: %s ",name,grade)
println(str + marks(marks))
println("Alphabets in your Name :: " +name.length())

}

def marks(marks: Int) : String = {
return "Marks :: " + marks
}
}

用它来调用上面的代码:

var student1 = new Student("Zahid Ansari","A", 55)
student1.getStudent()

输出 -

Name :: Zahid Ansari Grade :: A ()Marks :: 55
Alphabets in your Name :: 12

为什么打印"()"在输出中。

2)如果我改变标记方法如下:

def marks(marks: Int){
print("Marks :: " + marks)
}

并将其命名为:

println("Name :: " + name + " Grade :: " + grade + " " + marks(marks))

输出如下:

Marks :: 55Name :: Zahid Ansari Grade :: A ()
Alphabets in your Name :: 12

为什么Marks方法在print语句的第一部分之前执行。

2 个答案:

答案 0 :(得分:0)

var str = printf("Name :: %s Grade :: %s ",name,grade)

打印出Name :: Zahid Ansari Grade :: A并将printf的返回值放入str。返回值printfUnit(即“无”),并由

打印
println(str + marks(marks))

()

尝试在println("=====")行之后插入var str = printf... - 你会看到发生了什么。

答案 1 :(得分:0)

让我们逐行分割'getStudent'方法代码的输出

def getStudent(){ 
var str = printf("Name :: %s Grade :: %s ",name,grade) //line1
println(str + marks(marks))     //line2
println("Alphabets in your Name :: " +name.length()) //line3
}

第1行:正在打印'Name :: Zahid Ansari Grade :: A'并且还将单位值分配给var str,即'()' 第2行:当您打印str +标记(标记)时,它正在打印'()Marks :: 55' 请记住,由于var str保持单位值,此行()正在打印。 它实际上并不包含您在第1行形成的字符串。

在scala中,您可以将第1行写为      println(s“Name :: $ {name} Grade :: $ {grade}”)