文档章节

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

Marser_cn
 Marser_cn
发布于 04/15 22:13
字数 620
阅读 358
收藏 2
点赞 0
评论 1

上一篇,我们实现了一个简单的智能合约。用户输入什么字符串,合约就原样返回什么。在文章最后抛出了一个问题:如果我们事先在合约里定义好 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
不同的区块链技术,涉及那些编程语言?

区块链技术入门,涉及那些编程语言?在本文中,将介绍比特币、超级账本Fabric和以太坊这三种区块链中,分别使用什么开发语言来进行智能合约编程,并提供你进一步学习的资源链接。 小调查:你...

笔阁
05/05
0
0
不同区块链智能合约开发语言的选择

在本文中,将介绍比特币、超级账本Fabric和以太坊这三种区块链中,分别使用什么开发语言来进行智能合约的编程,并提供你进一步学习的资源链接。 比特币 比特币是第一个真正意义上的区块链,不...

以太坊教程
05/08
0
0
谷歌趋势:程序员对以太坊兴趣创历史新高 中国高居榜首新加坡其次

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

36氪
03/18
0
0
以太坊是什么 - 以太坊开发入门指南

很多同学已经跃跃欲试投入到区块链开发队伍当中来,可是又感觉无从下手,本文将基于以太坊平台,以通俗的方式介绍以太坊开发中涉及的各晦涩的概念,轻松带大家入门。 以太坊是什么 以太坊(E...

熊丽兵
2017/11/22
0
0
区块链学堂——开发第一个智能合同

以太坊 在前一篇我们了解了学习以太坊的重要性,以及开发以太坊必须掌握的基础知识,这一篇我们通过开发一个简单的智能合同,循序渐进地掌握其开发流程。 学习目标: 1、以太坊开发环境搭建 ...

叶先生的鱼
01/04
0
0
区块链开发入门:基于以太坊智能合约构建 ICO DApp

写给前端开发者的第一本区块链开发入门指南,通过从 0 到 1 实战开发一个 ICO DApp 项目(基于 V 神的 DAICO 设计思想),深入掌握区块链及以太坊技术。 为什么要选择区块链开发? 未来已来,...

p5deyt322jacs
05/25
0
0
写给前端的区块链开发入门指南:零基础开发基于以太坊智能合约的 ICO DApp

张泉灵说,时代抛弃我们的时候连声再见都不会说,马云说对于新兴事物,绝大多数人是看不见、看不起、看不懂、来不及。自从学完 Coursera 上的 Crypto Currency 课程,搞懂区块链技术的本质后...

王仕军
05/18
0
0
用Solidity语言通过以太坊钱包开发hello world示例

使用以太坊钱包开发实现经典的HelloWord智能合约类。本文中,我们将看到如何编写简单的合约并将其部署到区块链上。我们还将通过发送和读取数据来了解如何与我们的智能合约进行交互。 Solidi...

笔阁
06/21
0
0
Solidity语言代码库与docker镜像

Solidity语言是开发以太坊智能合约的不二选择,本文列举了在solidity学习和开发中可能对你有帮助的18个资源,包括示例代码、solidity库和预置dapp开发环境的docker镜像。 DigixDAO 提供用于D...

汇智网教程
06/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Ubuntu 安装 Redis (非源码Build方式)

安装redis : apt-get install redis-server # 安装完会自动自动 使用命令 ps -aux|grep redis 查看是否启动 ---------------------------------- redis 服务操作方式 /etc/init.d/redis-serv......

Alex142857
7分钟前
0
0
mysql字段中去掉括号

eg: select * from (select *,substring_index(substring_index(remarks,"[",1),']',-1) as carCard from test ) as t where carCard LIKE '%C999%'...

writeademo
10分钟前
0
0
web3.py简介

与web3.py库交互的共同入口是web3对象。web3对象提供API,用于python开发的应用与以太坊区块链进行交互,通常是通过连接JSON-RPC服务器进行。 Providers提供者 Providers使web3连接到区块链上...

笔阁
11分钟前
0
0
jquery 获取父页面某一个input框值得写法

//login_name 为父页面的input框的ID var login_name= $('#login_name', window.parent.document).val();//当前用户登录名...

gulf
12分钟前
0
0
mybatis高级查询

说实话不怎么想写这些,可能是我昨天太累了,妹的那个错误一直找不到。醉了,写一下把,分别是多表联合查询以及汇总 <resultMap id="mdxlResult" type="java.util.Map"> <id column="id" ...

木九天
14分钟前
0
0
Spring5(Java8版本)中的反射工具类和注解工具类

1.反射工具类 学习反射时很好的反射教程.这个工具类是基于Java8的。 package org.springframework.util;import java.lang.reflect.Constructor;import java.lang.reflect.Field;imp...

hutaishi
16分钟前
0
0
java io

Java IO在实际开发中的应用 http://www.cnblogs.com/ldh-better/p/7158658.html

小鱼吃大鱼
16分钟前
0
0
初结 react(当 React 版本是 ^16.2.0,当前时间 2018-01-12)

最近一段时间在零零碎碎地看 react 。在此,向所有自学 react 的朋友点个赞。多说一句,在自学道路上一定要戒骄戒躁,坚持下来。-----因为自学过程真的是心累啊(不同版本的博客不同的说法)...

秋季长青
17分钟前
11
0
grub2要启动整个iso的菜单命令如下

grub2要启动整个iso的菜单命令如下 menuentry "启动 Deepin OS Live System" --class deepin { set isofile=/DeepinOS.iso search -f --no-floppy --set=root $isofile set gfxpayload=keep ......

ziluopao
24分钟前
1
0
vuer如何使用富文本编辑器wangEditor自定义图片上传(解决跨域问题)

html定义一个装编辑器的DIV <template> <div id="editor"></div></template> npm安装wangEditor npm install wangeditor --save /*wangeditor需要小写*/ vue页面导入wangEditor im......

心鑫
28分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部