文档章节

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

Marser_cn
 Marser_cn
发布于 04/15 22:13
字数 620
阅读 481
收藏 2

上一篇,我们实现了一个简单的智能合约。用户输入什么字符串,合约就原样返回什么。在文章最后抛出了一个问题:如果我们事先在合约里定义好 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;
    }
}

<!--more-->

运行 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群


目前有几套区块链实践的视频课程(视频+源码),需要的可加我微信(kuangwenjie)私信我(付费):

  • 『区块链』从零构建以太坊(Ethereum)智能合约到项目实战
  • 基于Ethereum & IPFS的去中心化Ebay区块链项目开发实战
  • HyperLedger(超级账本)Fabric

© 著作权归作者所有

共有 人打赏支持
Marser_cn

Marser_cn

粉丝 55
博文 28
码字总数 20349
作品 0
广州
项目经理
私信 提问
加载中

评论(1)

不由分说
不由分说
Ethereum Stack Exchange 上面有回答,回答地址是:https://ethereum.stackexchange.com/questions/729/how-to-concatenate-strings-in-solidity?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa

用到了这个开源的库:github.com/Arachnid/solidity-stringutils/strings.sol
import "github.com/Arachnid/solidity-stringutils/strings.sol";

contract C {
using strings for *;
string public s;

function foo(string s1, string s2) {
s = s1.toSlice().concat(s2.toSlice());
}
}

但是,如果字符串很长的话,不是要消耗很多的gas吗?
智能合约开发环境搭建及Hello World合约

如果你对于以太坊智能合约开发还没有概念(本文会假设你已经知道这些概念),建议先阅读入门篇。 就先学习任何编程语言一样,入门的第一个程序都是Hello World。今天我们来一步一步从搭建以太...

熊丽兵
2017/11/26
0
0
solidity教程:solidity开发入门

这篇关于Solidity教程的博客展示了很多Solidity特性。本教程假定你对以太坊虚拟机和编程有一定的了解。 以太坊,“世界计算机”提供了一个非常强大的全球共享基础设施,使用名为Solidity的编...

笔阁
09/28
0
0
金色学院推出《以太坊Solidity智能合约开发速成》课程 -- 我是授课老师

从零开始讲解Solidity智能合约编程,从编程语句到高级技巧。 以太坊是一个分布式的平台,可以运行智能合约:应用程序按照既定程序运行,不会出现停机,审查,欺诈或第三方干扰的可能性。这些...

怎当她临去时秋波那一转
11/27
0
0
谷歌趋势:程序员对以太坊兴趣创历史新高 中国高居榜首新加坡其次

  根据谷歌趋势显示,目前程序员对智能合约编程的兴趣已经处于历史最高水平,其中中国高居全球榜首。   虽然搜索以太坊的数量有所下降,但是对于智能合约、以及其他与以太坊相关的术语仍...

36氪
03/18
0
0
课程推荐|深入浅出区块链博主:全栈区块链开发者的4堂必修课(线上优惠)

Tiny熊从2017年开始更新“深入浅出区块链”博客,在第一篇文章中,关于如何系统学习区块链技术,他这样描述:“从事区块链开发也有很多方向,如:区块链应用开发人员、区块链架构师、底层核心...

HiBlock
09/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

jquery通过id显示隐藏

var $div3 = $('#div3'); 显示 $div3.show(); 隐藏 $div3.hide();

yan_liu
今天
3
0
《乱世佳人》读书笔记及相关感悟3900字

《乱世佳人》读书笔记及相关感悟3900字: 之前一直听「荔枝」,后来不知怎的转向了「喜马拉雅」,一听就是三年。上班的时候听房产,买房了以后听装修,兴之所至时听旅行,分手后听亲密关系,...

原创小博客
今天
3
0
大数据教程(9.6)map端join实现

上一篇文章讲了mapreduce配合实现join,本节博主将讲述在map端的join实现; 一、需求 实现两个“表”的join操作,其中一个表数据量小,一个表很大,这种场景在实际中非常常见,比如“订单日志...

em_aaron
今天
3
0
cookie与session详解

session与cookie是什么? session与cookie属于一种会话控制技术.常用在身份识别,登录验证,数据传输等.举个例子,就像我们去超市买东西结账的时候,我们要拿出我们的会员卡才会获取优惠.这时...

士兵7
今天
3
0
十万个为什么之为什么大家都说dubbo

Dubbo是什么? 使用背景 dubbo为什么这么流行, 为什么大家都这么喜欢用dubbo; 通过了解分布式开发了解到, 为适应访问量暴增,业务拆分后, 子应用部署在多台服务器上,而多台服务器通过可以通过d...

尾生
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部