上一篇,我們實現了一個簡單的智慧合約。使用者輸入什麼字串,合約就原樣返回什麼。在文章最後丟擲了一個問題:如果我們事先在合約裡定義好 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 語言並不提供字串連線符的語法:
那有沒有其他方式,可以實現字串的拼接功能呢?以下部分為付費使用者專享福利,請點選連結跳轉至我的專欄付費購買。通過閱讀以下部分,你將學習到:
- 第三方字串工具合約:字串的擴充套件處理(查詢、分割、比較、拼接等功能)
- 智慧合約裡第三方合約的引入
- 字串的拼接實現
我的專欄:智慧合約 智慧合約開發QQ群:753778670