생성자는 연결된 클래스의 인스턴스를 생성하는 특수 함수입니다. 신규 오브젝트의 초기 값을 설정하는 데 사용할 수 있습니다.
constructor 지정자를 함수 이름에 추가하여 클래스에 생성자를 추가할 수 있습니다. 함수의 반환 타입을 지정하는 대신 함수가 클래스 이름에 할당되며, 그 뒤에는 모든 필드의 초기화가 옵니다. 클래스는 생성자를 여러 개 가질 수 있습니다.
Verse
class1 := class:
Property1 : int
MakeClass1<constructor>(Arg1:int) := class1:
Property1 := Arg1
Main():void =
X := MakeClass1(1)
F := MakeClass1()
Z := F(2)
클래스에 대한 생성자 정의하기:<constructor>지정자를 함수 이름에 추가하여 클래스에 생성자를 추가할 수 있습니다. 함수의 반환 타입을 지정하는 대신 함수가 클래스 이름에 할당되며, 그 뒤에는 모든 필드의 초기화가 옵니다. 클래스는 생성자를 여러 개 가질 수 있습니다.
생성자에서 변수를 추가하고 코드 실행하기:block 표현식을 사용하여 생성자 내에서 표현식을 실행하고, let 키워드로 새 변수를 추가할 수 있습니다.
Verse
MakeClass1Plus1<constructor>(Arg1 : int) := class1:
MakeClass1<constructor>(Arg1 + 1) # Note use of <constructor> on invocation
# The base type constructor can be invoked in any order with respect to properties,
# but the properties "win"
MakeOtherClass2<constructor>(Arg1 : int, Arg2 : int) := class2:
Property2 := Arg2
MakeClass1<constructor>(Arg1)
# Note that effects are still ordered as they appear in the code
생성자에서 다른 생성자 호출하기: 생성자에서 다른 생성자를 호출할 수 있습니다. 또한 모든 필드가 초기화되어 있는 한 클래스의 생성자에서 클래스의 수퍼클래스에 대한 생성자를 호출할 수도 있습니다. 생성자가 다른 생성자를 호출하고 두 생성자 모두 필드를 초기화하면 첫 번째 생성자에 제공된 값만 필드에 사용됩니다. 두 생성자 간의 표현식평가 순서는 부작용을 고려하여 표현식이 작성된 순서지만 부작용을 고려하여 첫 번째 생성자에 제공된 값만 사용됩니다.