最後函數部分,就是主要的內容了。
有幾種不同的函數式
fun name() {}; //內部函數
public fun name() {}; //公開函數
public entry name() {}; //入口函數
public(friend) fun name() {};//這我還不會 XD...
內部函數 - 此函數用於只有本合約內部可以調用、執行。
公開函數 - 在其他模組module可以調用、執行此函數。
入口函數 - 在部署合約後,用於外部執行指令的函數,意指,這是外部使用此合約的入口處。
name - 函數名稱,通常使用小寫+_來編名,如:buy_ham。
() - 括號內部為要帶入的數值。
{} - 花括號內部為此函數的內容。
若此函數有需要return,在花括號後面需要加上 :類型
例如: fun name(){}:u64;
這樣代表這串函數最後會返回一個數值。
需要注意的是,如果這函數為入口函數,那他就不可以有返回值。
大致上suimove的架構是如此,為了比較好學習,就讓我們直接開始 製作三明治。
module sandwich::shop {
//首先我們來建構要製作三明治的材料
struct Ham has key { id:UID } //宣告火腿結構,並賦予它id
struct Bread has key { id:UID } //宣告麵包結構。
struct Sandwich has key { id:UID } //宣告三明治結構。
此處有將此三個結構都賦能key,此能力表明這些結構是可以在地址之間傳輸的Sui對象。
再來因為我們有在這裡用到UID,這個類型,所以我們需要調用框架。
module sandwich::shop {
use sui::object::UID // UID隸屬於object裡,所以從object指定調用它。
struct Ham has key { id:UID }
struct Bread has key { id:UID }
struct Sandwich has key { id:UID }
//接著我們來給火腿跟麵包定價。
const HAM_PRICE: u64 = 10;
const BREAD_PRICE: u64 = 2;