Move簡明教程(2)【模塊與腳本】

? ? Move 有兩種不同類型的程序: 模塊和腳本。模塊是定義結(jié)構(gòu)類型以及操作這些類型的函數(shù)的庫群扶。結(jié)構(gòu)類型定義 Move 的全局存儲(chǔ)模式,模塊函數(shù)定義更新存儲(chǔ)的規(guī)則。模塊本身也存儲(chǔ)在全局存儲(chǔ)中克婶。腳本是類似于傳統(tǒng)語言中的主函數(shù)的可執(zhí)行入口點(diǎn)。腳本通常調(diào)用已發(fā)布模塊的函數(shù)對(duì)全局存儲(chǔ)進(jìn)行更新丹泉。腳本是不在全局存儲(chǔ)中發(fā)布的臨時(shí)代碼段情萤。
? ? Move的源文件(或編譯單元)可能包含多個(gè)模塊和腳本。但是摹恨,發(fā)布模塊或執(zhí)行腳本是獨(dú)立的 VM 操作筋岛。

一、腳本
? ? 腳本具有如下結(jié)構(gòu):

script {
    <use>*
    <constants>*
    fun <identifier><[type parameters: constraint]*>([identifier: type]*) <function_body>
}

? ? 腳本塊必須以它的所有 use 聲明開始晒哄,然后是任何常量和(最后)主函數(shù)聲明睁宰。Main 函數(shù)可以有任何名稱(也就是說肪获,它不需要被稱為 main) ,是腳本塊中唯一的函數(shù)柒傻,可以有任意數(shù)量的參數(shù)孝赫,并且不能有返回值邓厕。下面是每個(gè)組件的示例:

script {
    // Import the Debug module published at the named account address Std.
    use Std::Debug;
    const ONE: u64 = 1;
    fun main(x: u64) {
        let sum = x + ONE;
        Debug::print(&sum)
    }

? ? 腳本的能力非常有限ーー它們不能聲明好友(Friends)社露、結(jié)構(gòu)類型或訪問全局存儲(chǔ)。它們的主要用途是調(diào)用模塊函數(shù)映胁。

二预侯、 模塊
? ? 模塊具有以下語法:

module <address>::<identifier> {
    (<use> | <friend> | <type> | <function> | <constant>)*
}

? ? 其中 < address > 是有效的命名地址或文字地址致开。例如:

module 0x42::Test {
    struct Example has copy, drop { i: u64 }
    use Std::Debug;
    friend 0x42::AnotherTest;
    const ONE: u64 = 1;

    public fun print(x: u64) {
        let sum = x + ONE;
        let example = Example { i: sum };
        Debug::print(&sum)
    }
}

? ? "module 0x42::Test"部分表示模塊 Test 將在全局存儲(chǔ)中的賬戶地址0x42下發(fā)布。模塊也可以使用命名地址聲明萎馅。例如:

module TestAddr::Test {
    struct Example has copy, drop { a: address}
    use Std::Debug;
    friend TestAddr::AnotherTest;

    public fun print() {
        let example = Example { a: @TestAddr};
        Debug::print(&example)
    }
}

? ? 因?yàn)槊刂分淮嬖谟谠凑Z言級(jí)別和編譯期間双戳,所以在字節(jié)碼級(jí)別,命名地址將完全被它們所代表的值所取代糜芳。例如飒货,如果我們有以下代碼:

script {
    fun example() {
        MyAddr::M::foo(@MyAddr);
    }
}

? ? 然后我們將 MyAddr 設(shè)置為0xC0FFEE,那么它將等效于下面的操作:

script {
    fun example() {
        0xC0FFEE::M::foo(@0xC0FFEE);
    }
}

? ? 但是在源代碼級(jí)別耍目,這兩個(gè)函數(shù)是不等價(jià)的ーー函數(shù) M: : foo 必須通過 MyAddr 命名的地址來訪問膏斤,而不是通過分配給該地址的數(shù)值來訪問。模塊名稱可以以字母 a 到 z 或字母 A 到 Z 開頭邪驮。在第一個(gè)字符之后莫辨,模塊名稱可以包含下劃線 _、字母 a 到 z毅访、字母 A 到 Z 或數(shù)字0到9沮榜。

module my_module {}
module FooBar42 {}

? ? 通常,模塊名稱以大寫字母開頭喻粹。一個(gè)名為 MyModule 的模塊應(yīng)該存儲(chǔ)在一個(gè)名為 MyModule.move 的源文件中蟆融。
? ? 模塊塊內(nèi)的所有元素可以以任意順序出現(xiàn)∈匚兀基本上型酥,模塊是類型和函數(shù)的集合。Uses關(guān)鍵字可以聲明來自其他模塊的導(dǎo)入類型查乒,使用Friends可以指定受信任模塊的列表弥喉,Constants可以定義該模塊函數(shù)中使用的私有常量。

原文:https://mp.weixin.qq.com/s/GJM31htRrCFvcLOTPrHasA

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末玛迄,一起剝皮案震驚了整個(gè)濱河市由境,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖虏杰,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讥蟆,死亡現(xiàn)場離奇詭異,居然都是意外死亡纺阔,警方通過查閱死者的電腦和手機(jī)瘸彤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笛钝,“玉大人钧栖,你說我怎么就攤上這事∑畔瑁” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵掏婶,是天一觀的道長啃奴。 經(jīng)常有香客問我,道長雄妥,這世上最難降的妖魔是什么最蕾? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮老厌,結(jié)果婚禮上瘟则,老公的妹妹穿的比我還像新娘。我一直安慰自己枝秤,他們只是感情好醋拧,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著淀弹,像睡著了一般丹壕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上薇溃,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天菌赖,我揣著相機(jī)與錄音,去河邊找鬼沐序。 笑死琉用,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的策幼。 我是一名探鬼主播邑时,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼垄惧!你這毒婦竟也來了刁愿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤到逊,失蹤者是張志新(化名)和其女友劉穎铣口,沒想到半個(gè)月后滤钱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脑题,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年件缸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叔遂。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡他炊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出已艰,到底是詐尸還是另有隱情痊末,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布哩掺,位于F島的核電站凿叠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏嚼吞。R本人自食惡果不足惜盒件,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望舱禽。 院中可真熱鬧炒刁,春花似錦、人聲如沸誊稚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽片吊。三九已至绽昏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間俏脊,已是汗流浹背全谤。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留爷贫,地道東北人认然。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像漫萄,于是被迫代替她去往敵國和親卷员。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 博主的開發(fā)及調(diào)試環(huán)境是 macOS 10.13.4 + Chrome/65.0.3325.181 + honorV...
    faremax閱讀 8,306評(píng)論 3 10
  • 開始 Python 之旅 腳本文件 如果程序中沒有 #!/usr/bin/env python3 的話腾务,應(yīng)該使用 ...
    Jachin111閱讀 748評(píng)論 0 1
  • awk簡介 awk是一種編程語言毕骡,用于在linux/unix下對(duì)文本和數(shù)據(jù)進(jìn)行處理。數(shù)據(jù)可以來自標(biāo)準(zhǔn)輸入、一個(gè)或多...
    yeahuh閱讀 3,947評(píng)論 0 7
  • 一未巫、簡介? ? 歡迎來到Move語言的世界窿撬,這是一種用于安全、沙箱和正式驗(yàn)證編程的下一代語言叙凡。它的第一個(gè)用例是 ...
    自如致知閱讀 599評(píng)論 0 0
  • 基本知識(shí) 第一個(gè)Python程序: 如何退出Python的解釋器提示符: ? 在Linux或OS X的shel...
    木草zhg閱讀 1,357評(píng)論 0 2