我正在学习scala,我不知道如何以及何时在scala中使用变量/方法声明。
以下是有关声明和定义的scala语法:https://www.scala-lang.org/files/archive/spec/2.11/04-basic-declarations-and-definitions.html
它表明:
Dcl ::= ‘val’ ValDcl
| ‘var’ VarDcl
| ‘def’ FunDcl
| ‘type’ {nl} TypeDcl
PatVarDef ::= ‘val’ PatDef
| ‘var’ VarDef
Def ::= PatVarDef
| ‘def’ FunDef
| ‘type’ {nl} TypeDef
| TmplDef
例如,这是变量x
和方法hello
的声明:
var x: Int;
class Tester {
def hello(var x:Int):Int
}
这是变量x
和方法hello
的定义:
var x: Int = 1
class Tester {
def hello(var x:Int): Int = x
}
如果我想用scala编写一些应用程序,似乎我只需要定义,我不知道如何以及何时使用声明。
声明是否等于接口? 请教育我。
答案 0 :(得分:2)
在Scala中,(根据我的经验)声明用于两种主要用法:
type UserId = Int
)或别名蛋糕类型(type Codec = Serializer with Deserializer
)您可能已经注意到,在非抽象类中不能有变量或方法声明,因为在运行时不能有未定义的行为。根据定义的scala语言的含义,此处未定义的含义精确地表示“没有定义”。
因此,我不会说您只需要编写Scala代码的定义,因为声明非常有用。但是,对于每个声明,您至少需要一个定义才能使它有用!
答案 1 :(得分:2)
如果我想用scala编写一些应用程序,似乎我所需要的只是定义
可以从纯声明中编写定义。例如考虑
trait Iterator[+A] {
def hasNext: Boolean
def next(): A
def nextOption(): Option[A] = if (hasNext) Some(next()) else None
}
此处nextOption
是根据hasNext
和next
定义的,尽管在此时间点后两者尚未定义。当然,在运行程序时,所有声明都需要与充实的对象链接,但是在编译时,即使有时我们不具备所有这些功能,也可以继续编写程序详细信息。