Rholang(第3課):傳音筒、"name"和“process”

Rholang(第3課):傳音筒、

免責聲明:本文旨在傳遞更多市場信息,不構成任何投資建議。文章僅代表作者觀點,不代表火星財經官方立場。

消息傳遞

Rholang(第3课):传音筒、

在前面的章節,我們學習瞭如何向祖母或披薩店發送消息。但是至今所有的接收方都通過將消息打印至標準輸出,來告知已經接收到了。

現在讓我們做一些更有意思的事情--類似孩子們的傳話遊戲那樣傳遞消息。

telephone3.rho

Rholang(第3课):传音筒、

你可以通過運行上面的代碼來做實驗。你可以修改你覺得合適的地方多運行幾次。

練習

傳話遊戲很有趣,但有更多玩家參與會更好。請添加第三位名叫Charlie的玩家。bob接收消息後將發送消息給Charlie,而不是簡單打印至<code>stdout/<code>。然後Charlie將它打印至屏幕上。多多益善!

Rholang(第3课):传音筒、

練習

如果你曾經玩過電話遊戲,你應該知道,消息極少能被正確地傳遞。Bob現在決定通過發送一條錯誤的消息。改寫程序,使得Bob無論收到什麼,都能傳遞不同的消息。

*這到底是啥?

Rholang(第3课):传音筒、

你注意到 <code>@"Bob"!(*message)/<code>中的<code>*/<code>? 在rholang中有兩種類型, "names" 和 "processes"。同樣也有可以在兩者之間互相轉化的方法。"processes"可以是rholang中任何一個代碼片段,例如我們的傳話筒遊戲,或者是披薩店訂單程序。“process”可以是上百行的大程序,也可以只有幾行。它們甚至可以是用於表示值的代碼。下面是一些“process”的例子。

  • <code>stdout!("Sup Rholang?")/<code>一個常見的發送操作。
  • <code>Nil/<code>最小的“process”。如字面意思,它不做任何事。
  • <code>for(msg 一個常見的接收操作,在消息到達時它不會做任何事。/<code>
  • <code>"Hello World"/<code>另一個不做任何事情的小“process”。被稱為"基礎術語"。

"names"可以被用於賦名通道以發送消息。在大多數編程語言中,"name"是完全獨立的一樣東西,它們本身就存在。但是在rholang中,"name"來自"引用process",即將@標籤放在“process”之前,即可得到一個"name"。下面是"name"的一些例子。

  • <code>@"Hello World"/<code>通過引用基礎術語"Hello World"來創建。
  • <code>@Nil/<code>最小的“name”。通過引用最小的“process”來創建。
  • <code>@(@"Alice"!("I like rholang, pass it on."))/<code>通過引用來自傳話筒遊戲的"process"來創建。

關於*的一切

Rholang(第3课):传音筒、

通過用<code>@/<code>符號來標記“process”,我們可以將“process”打包以創建一些“name”。我們也可以通過使用<code>*/<code>標記“name”,從而將“name”轉變為“process”。在rholang中,我們需要記住的是發送“process”和接收“name”。這很重要,因此我再次強調。你總是發送一個“process”,在另一端接收一個“name”。Aice通過<code>for(message 接收我們的消息,所以, <code>message/<code>變成了一個“name”。當她之後發送給Bob時,她不得不發送“process”,所以她要用<code>@"Bob"!(*message)/<code>使用<code>*/<code>將<code>message/<code>轉變回一個“process”。/<code>

小測驗

我們發送什麼?

  • processes
  • names

我們接收什麼?

  • processes
  • names

<code>@"registration"/<code>是什麼?

  • process
  • name
  • 非法語法

<code>Nil/<code>是什麼?

  • process
  • name
  • 非法語法

<code>@Nil/<code>是什麼?

  • process
  • name
  • 非法語法

<code>@@Nil/<code>是什麼?

  • process
  • name
  • 非法語法

<code>*importantData/<code>是一個“process”, 那麼<code>importantData/<code>是什麼?

  • process
  • name
  • 非法語法

下面哪一個與<code>"BobsPhone"/<code>等價?

  • <code>*@"BobsPhone"/<code>
  • <code>@"BobsPhone"/<code>
  • <code>*"BobsPhone"/<code>
  • <code>@*BobsPhone/<code>
  • <code>stdout!("BobsPhone")/<code>

練習

Rholang(第3课):传音筒、

不像之前的線性傳話遊戲那樣,每個玩家將信息傳遞給下一位,我麼來為遊戲添加一個分支。現在,Bob與先前一樣將發送消息給Charlie,但同時也會發送給Elise。每個分支的長度由你定,但在每個分支的最後都得將消息打印至標準輸出。


分享到:


相關文章: