selfdestruct(合约地址)
合约销毁关键字,通过该关键字可以销毁合约。老版本上面销毁以后执行合约时会报错,新版本不会,拿uint相比,老版本会报异常,新版本会返回0;string者返回 空 字符串
address url;
uint public a = 0;
constructor(){
url=msg.sender;
}
function addA(){
a+=10;
}
//销毁该合约销毁该合约好
function xiaohui(){
if(msg.sender == url){
//销毁关键字
selfdestruct(url);
}
}
struct : 定义对象关键字
//这里我们定义了一个对象
struct user{
uint fens;
string name;
}
//我们将对象通过memory初始化,不加memory 就会抛出异常。 初始化方式1
function getUser() public view returns(uint,string){
user memory u = user(100,"nihao");
return (u.fens,u.name);
}
//初始化方式2
function getUserq() public view returns(uint,string){
user memory u = user({fens:300,name:"nihao你好s"});
return (u.fens,u.name);
}
对象里面定义mapper不可以直接被修改,需要赋值给变量灵活修改。
struct user{
uint fens;
string name;
//我们这里定义了一个mapping属性
mapping(uint => string) map;
}
user meimei;
function getUser() public view returns(uint,string){
user memory u = user(100,"nihao");
u.name="66666666s";
meimei = u;
//如果我们这里直接使用u 对象属性的话是不可以被赋值成功的。
//所以我们上面需要重新定义一个对象,将数据赋值给对象以后在修改赋值的对象就可以了。
meimei.map[0]="xgai修改cgo";
return (u.fens,meimei.map[0]);
}
注意事项:
struct user{
uint fens;
string name;
}
//如果使用对象作为参数的话必须使用关键字internal
function getUser(user u) internal returns(user){
//传入的对象不可以直接复制给里面对象属性,会报异常
user a = u;
return u;
}
struct user{
uint fens;
string name;
}
user er;
//使用storage关键字可以将传入对象 地址 赋值给定义变量。storage 表示地址引用
function setUser(user storage u) internal{
user map = u;
map.name="nihao你好232";
}
//所以下面可以输出上面定义的string字符串
function getUser() returns(string){
setUser(er);
return er.name;
}