我已经开始学习稳固,并有一些简单的问题:
(function a() { b=4; } )
),为什么这是可能的,因为函数不是外部的或公共的?byte32
类型的变量所需的气体少于string
类型的变量,那么人们为什么要使用字符串?谢谢
发布于 2017-08-03 06:09:20
第1部分:
在许多不同的编程语言中,在变量名称或变化大小写之前使用下划线来区分变量和下划线或替代大小写。
在坚固性中,常使用带有下划线的变量来表示参数。(我不知道你有多少编程经验,所以如果我听起来有点迂腐,请原谅我)
以下列例子为例:
// The contract declaration.
pragma solidity ^0.4.14;
contract ExampleContract {
string myMessage;
// The contract constructor
function ExampleContract (string _myMessage) {
// the value of myMessage is text
// which is stored in the 'state' of the contract.
// _myMessage is the parameter being passed in.
// When you deploy the contract, you specify a value for _myMessage.
// This value is then assigned to myMessage.
myMessage = _myMessage;
}
// A "getter" function that just returns the value of myMessage,
// which is stored in the contract's "state".
function GetMessage () returns (string) {
return myMessage;
}
}
第2部分:
函数只是操纵数据的方法。给定一个输入,产生一个输出。
事务是修改合同状态的特殊类型的函数。因此,如果我在上面的合同中有另一个函数来更改消息,那么用一个新消息调用该函数将被视为一个事务。
但是使用内联函数没有什么问题。想一想,在一个函数中将两个数字相加。int i = 1 + 1;
是一种可靠的有效操作。将内联函数看作是更复杂的操作。
第三部分。
有趣的观察。根据坚实的文档:
根据经验,对任意长度的原始字节数据使用字节,对任意长度的字符串(UTF-8)使用字符串。如果可以将长度限制为一定数量的字节,请始终使用bytes1中的一个到bytes32,因为它们要便宜得多。
本质上,如果您知道字符串的大小永远不会超过32个字节,那么使用bytes32
是完全有效的。当人们不知道最大的大小应该是什么时,才会使用字符串。
https://ethereum.stackexchange.com/questions/23619
复制相似问题