以太坊智慧合約開發第五篇:字串拼接—Solidity

智慧合約發表於2018-04-14

原文發表於:以太坊智慧合約開發第五篇:字串拼接—Solidity

上一篇,我們實現了一個簡單的智慧合約。使用者輸入什麼字串,合約就原樣返回什麼。在文章最後丟擲了一個問題:如果我們事先在合約裡定義好 Hello 字串,如何與 name 變數進行字串拼接?

在智慧合約裡進行字串的拼接可不是一件簡單的事情。本篇就來介紹智慧合約裡的字串拼接。

嘗試

我們先用絕大部分語言都通用的連線符 +. 來嘗試著修改程式碼:

//pragma關鍵字:版本申明。
//用來指示編譯器將程式碼編譯成特定版本,以免引起相容性問題
//此處不支援0.4.0之前的編譯器,也不支援0.5.0之後的編譯器(條件為 ^)
pragma solidity ^0.4.0;

//contract關鍵字:合約申明
//和Java、PHP中的class類似
//此處是申明一個名為Hello的合約
contract Hello {

    string str="Hello ";

    //public: 函式訪問屬性(後續文章為詳細闡述)
    //returns (string): 定義返回值型別為string
    function say(string name) public returns (string) {
        return str + name;
    }
}
複製程式碼

執行 node deploy.js 部署指令碼後,丟擲了一個異常:

TypeError: Operator + not compatible with types string storage ref and string memory
return str + name;

我們將其修改為 . 並嘗試部署後,也丟擲一個異常:

TypeError: Member "name" not found or not visible after argument-dependent lookup in string storage ref return str . name;

說明在智慧合約裡,***+*** 和 . 都不是連線符。 通過查閱 Solidity 官方文件,我們發現 Solidity 語言並不提供字串連線符的語法:

Solidity文件
那有沒有其他方式,可以實現字串的拼接功能呢?

以下部分為付費使用者專享福利,請點選連結跳轉至我的專欄付費購買。通過閱讀以下部分,你將學習到:

  • 第三方字串工具合約:字串的擴充套件處理(查詢、分割、比較、拼接等功能)
  • 智慧合約裡第三方合約的引入
  • 字串的拼接實現

我的專欄:智慧合約 智慧合約開發QQ群:753778670

智慧合約開發QQ群

相關文章