Home | 簡體中文 | 繁體中文 | 雜文 | 知乎專欄 | Github | OSChina 博客 | 雲社區 | 雲棲社區 | Facebook | Linkedin | 視頻教程 | 打賞(Donations) | About
知乎專欄多維度架構 | 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者”

14.7. 函數

14.7.1. 構造方法

構造方法的定義是 contract 與 function 相同

				
pragma solidity ^0.4.18;

contract MyContractByNetkiller {
    /* Constructor */

    function MyContractByNetkiller() public{

    }
}
				
			

14.7.2. 定義函數

沒有返回值

				
	function setName(string _name) public{
        name = _name;
    }			
				
			

14.7.3. 函數返回值

有返回值

				
	function getName() public view returns(string){
        return name;
    }
				
			

14.7.4. 參數傳遞

除了 f(2,3) 這樣傳遞參數,還可以使用類似字典或Map的方式 f({value: 2, key: 3});

				
pragma solidity ^0.4.0;

contract C {
    function f(uint key, uint value) {
        // ...
    }

    function g() {
        // named arguments
        f({value: 2, key: 3});
    }
}				
				
			

14.7.5. 函數的例子

完整的例子

				
pragma solidity ^0.4.18;

contract MyContractByNetkiller {
    /* Constructor */
    string name;
    int num;
    function MyContractByNetkiller() public{
        name = "default";
        num = 1;
    }
    function setName(string _name) public{
        name = _name;
    }
    function getName() public view returns(string){
        return name;
    }
    function setNum(int n) public{
        num = n;
    }
    function addNum(int m) public view returns(int res){
        res = m + num;
    }
}
				
			

14.7.6. Fallback function

				
				
				
			

14.7.7. modifier

modifier 可以理解為 function 的觸發器,或者理解為 hook。執行 function的時候會首先運行 modifier

_; 表示執行 modifier 完成所有命令後,繼續運行 function 內的邏輯。

				
pragma solidity ^0.4.11;  
  
contract owned {  
    function owned() { owner = msg.sender; }  
    address owner;    
    uint price;
    mapping (address => bool) registeredAddresses;
  
    modifier onlyOwner {  
        require(msg.sender == owner);  
        _;  
    } 
    function changePrice(uint _price) onlyOwner {  
        price = _price;  
    } 
    function close() onlyOwner {  
        selfdestruct(owner);  
    }  
}