以太坊智能合约开发第五篇:字符串拼接—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 语言并不提供字符串连接符的语法:

那有没有其他方式,可以实现字符串的拼接功能呢?

以下部分为付费用户专享福利,请点击链接跳转至我的专栏付费购买。通过阅读以下部分,你将学习到:

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我杨某人的青春满是悔恨

Swift2网络操作和异常处理

相信写过Swift的人应该都知道Alamofire,它是AFNetworking的Swift版本,同一个作者写的。之前在项目中我也一直使用Alamofire,但...

971
来自专栏数据和云

中文命名可能有什么坏处?

在最近的一个报告分析中,再次遭遇到全中文的数据结构设计。从图示中可以看到,所有的表名、索引名等,都是用中文命名的。 我们不考虑面向对象、方法那回事,单纯从技术角...

3575
来自专栏calvin

centos7 lldb 调试netcore应用的内存泄漏和死循环示例(dump文件调试)

lldb工具的安装,linux下netcore如何生成dump文件,查看下文 centos7使用lldb调试netcore应用转储dump文件

1823
来自专栏Ldpe2G的个人博客

ScalaMP ---- 模仿 OpenMp 的一个简单并行计算框架

这个项目是一次课程作业,要求是写一个并行计算框架,本人本身对openmp比较熟,

2046
来自专栏区块链

理解区块链背后的Merkle Tree

利用了 Merkle tree 的区块链技术,现今受欢迎的程度不亚于比特币。需要跟踪数据并且保证数据一致性的企业也开始看到区块链技术对这一过程的帮助。

2.5K13
来自专栏云计算

Fourinone-4.17.10 新版本发布​:单机毫秒完成上亿大数据常规统计

Fourinone-4.17.10 新版本内容: 虽然现在最火的是 AI,但是大数据和计算能力仍然是机器学习 /AI 算法的重要支撑,我们的业务场景大部分是通过...

2108
来自专栏人工智能的秘密

面对上亿规模的数据分析,如何做到单机毫秒完成?

虽然大家都希望有一天能通过人工智能来完成各类操作,但是目前来说,大数据和计算能力仍旧是机器学习和算法的重要支撑。

2700
来自专栏牛肉圆粉不加葱

Spark 内存管理的前世今生(下)

在《Spark 内存管理的前世今生(上)》中,我们介绍了 UnifiedMemoryManager 是如何管理内存的。然而,UnifiedMemoryManag...

952
来自专栏JackeyGao的博客

Python 和 Golang 一点愚见

Python 之所以有很好开发效率是因为语法简单,灵活。有大量的轮子可供选择, 文档支持非常棒。 我用Python编程的时候,基本成了一把梭“拿起键盘复制粘贴,...

1062
来自专栏娱乐心理测试

Invalid prop: type check failed for prop "price". Expected String, got Number.

在谷歌浏览器上写Vue项目时,总会有很多警告,关键是红色的,非常刺眼,一片红好像是严重的错误,在有强迫症的程序员眼里非常之别扭,准备清除警告!

1182

扫码关注云+社区