美文网首页Dapp开发智能合约我爱编程
以太坊智能合约开发第五篇:字符串拼接—Solidity

以太坊智能合约开发第五篇:字符串拼接—Solidity

作者: 智能合约 | 来源:发表于2018-04-12 16:20 被阅读173次

    上一篇,我们实现了一个简单的智能合约。用户输入什么字符串,合约就原样返回什么。在文章最后抛出了一个问题:如果我们事先在合约里定义好 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文档Solidity文档
    那有没有其他方式,可以实现字符串的拼接功能呢?

    以下部分为付费用户专享福利。通过阅读以下部分,你将学习到:

    第三方字符串工具合约:字符串的扩展处理(查找、分割、比较、拼接等功能)
    智能合约里第三方合约的引入
    字符串的拼接实现

    相关文章

      网友评论

        本文标题:以太坊智能合约开发第五篇:字符串拼接—Solidity

        本文链接:https://www.haomeiwen.com/subject/ijcfkftx.html