我正在学习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语句的第一部分之前执行。
答案 0 :(得分:0)
此
var str = printf("Name :: %s Grade :: %s ",name,grade)
打印出Name :: Zahid Ansari Grade :: A
并将printf
的返回值放入str
。返回值printf
为Unit
(即“无”),并由
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}”)