Move Language Basic
Function Visibilities

Function Visibilities

Private

  • Các function này chỉ có thể được sử dụng bên trong module nơi chúng được định nghĩa.
  • Hãy nghĩ về chúng như các hàm "chỉ dành cho module". Không module hay script nào khác có thể truy cập chúng.
module jayden_address::Priv {
    fun pri_func(): u8 {
        return 0;
    }
}
 
module jayden_address::Publ {
    fun other_func(): u8 {
        let result: u8 = jayden_address::Priv::pri_func(); // Error
        return result;
    }
}

Public

  • Các hàm này có thể được sử dụng bởi bất kỳ module hoặc script nào khác.
  • Chúng giống như các hàm "mở cho tất cả mọi người".
module jayden_address::Publ {
    public fun transfer(): u8 {
        return 0;
    }
}
 
module jayden_address::OtherMod {
    fun other_func(): u8 {
        let result: u8 = jayden_address::Publ::transfer();
        return result;
    }
}

Public(friend)

  • Các hàm này có thể được sử dụng bởi module nơi chúng được định nghĩa và bởi các module cụ thể khác được liệt kê là "friends".
  • Nó giống như có "quyền truy cập VIP" mà chỉ những người bạn được chọn mới có thể sử dụng các hàm này.
module jayden_address::PubFriend {
    friend jayden_address::OtherMod;
 
    public(friend) fun transfer(): u8 {
        return 0;
    }
}
 
module jayden_address::OtherMod {
    fun other_func(): u8 {
        let result: u8 = jayden_address::PubFriend::transfer();
        return result;
    }
}
 
module jayden_address::NotAllow {
    fun other_func(): u8 {
        let result: u8 = jayden_address::PubFriend::transfer(); // Error
        return result;
    }
}

Entry

  • Đây là các hàm đặc biệt nơi chương trình Move bắt đầu chạy hoặc nơi user có thể gọi vào contract.
  • Bạn có thể kết hợp "entry" với "public" hoặc "public(friend)" để chỉ định ai có thể bắt đầu thực thi.
module jayden_address::EntryFunc {
    public(friend) entry fun internal_transfer(): u8 { // public friend entry
        return 0;
    }
 
    public entry fun transfer(): u8 { // public entry
        return 0;
    }
 
    entry fun transfer(): u8 { // private entry
        return 0;
    }
}