Library
Library
code:HelloWorld.scilla
(* 標準ライブラリ *)
import ListUtils
(***************************************)
(* Associated library *)
(***************************************)
library HelloWorld
(* one_msg関数 *)
let one_msg =
fun (msg : Message) =>
let nil_msg = Nil {Message} in
Cons {Message} msg nil_msg
(* グローバル定数 *)
let not_owner_code = Int32 1
let set_hello_code = Int32 2
解説
HelloWorldコントラクトのコードでは、Library内に1つのone_msg関数と2つのグローバル定数があります。
標準ライブラリは、ファイルの最初にimport ライブラリ名にて宣言します。複数の場合はスペース で続けます。 code:sample
import ListUtils PairUtils
one_msg関数は1つのメッセージが入る配列を管理しています。
code:one_msg関数
let one_msg =
fun (msg : Message) =>
let nil_msg = Nil {Message} in
Cons {Message} msg nil_msg
fun (msg : Message)はMessage型のmsgを引数として宣言しています。 let nil_msg = Nil {Message} inではMessage型配列のnil_msgを宣言しています。 Nilは空の配列を作成するList型の関数です。また、ここではinを末尾に使っていますが、 これは、宣言したnil_msgをプライベート変数として次行でも利用できるようにしています。
※他言語で言う、thenに近いふるまいとなります。
Cons {Message} msg nil_msgではMessage型配列のnil_msgに引数で受け取ったmsgを追加しています。 Consは配列に要素を追加するList型の関数です。 ※他言語での追加式の記述は、左辺に配列、右辺に要素を宣言しますが、Scillaの場合は逆となるため注意が必要です。
グローバル定数はContractからも参照可能です。定数のため変更はできません。
let not_owner_code = Int32 1は、Int型の1を定数として宣言しています。