Solidity語言學習筆記————30、函式過載
函式過載(Function Overloading)
合約可以有多個同名但不同輸入引數的函式。這也適用於繼承的函式。下面示例展示了合約A
中對函式f
的過載。
pragma solidity ^0.4.16;
contract A {
function f(uint _in) public pure returns (uint out) {
out = 1;
}
function f(uint _in, bytes32 _key) public pure returns (uint out) {
out = 2;
}
}
在外部介面中也存在過載的函式。如果兩個外部可見的函式的Solidity型別不同,但外部型別相同,不能成功過載。
// 下面程式碼無法編譯
pragma solidity ^0.4.16;
contract A {
function f(B _in) public pure returns (B out) {
out = _in;
}
function f(address _in) public pure returns (address out) {
out = _in;
}
}
contract B {
}
以上兩個f
函式都接受了ABI的地址型別,雖然它們的Solidity型別不同。(合約型別相當於地址型別)
過載解析和引數匹配(Overload resolution and Argument matching)
通過將當前範圍內的函式宣告與函式呼叫中提供的引數相匹配,可以選擇過載函式。如果所有引數都可以隱式地轉換為預期型別,該函式則被選擇作為過載候選項。如果沒有一個候選,解析失敗。
註解 |
---|
返回引數沒有考慮到過載解析。 |
pragma solidity ^0.4.16;
contract A {
function f(uint8 _in) public pure returns (uint8 out) {
out = _in;
}
function f(uint256 _in) public pure returns (uint256 out) {
out = _in;
}
}
Calling f(50) would create a type error since 250 can be implicitly converted both to uint8 and uint256 types. On another hand f(256) would resolve to f(uint256) overload as 256 cannot be implicitly converted to uint8. 呼叫
f(50)
會有一個型別錯誤,因為250
可以隱式地轉換為uint8
和uint256
型別。另一方面,f(256)
將解析為f(uint256)
過載,因為256
不能隱式地轉換為uint8
。 相關文章
- Solidity語言學習筆記————28、純函式Solid筆記函式
- Solidity語言學習筆記————26、回退函式Solid筆記函式
- Solidity語言學習筆記————27、檢視函式Solid筆記函式
- Solidity語言學習筆記————18、字串和函式Solid筆記字串函式
- Solidity語言學習筆記————20、函式修飾符Solid筆記函式
- Solidity語言學習筆記————23、函式呼叫和賦值Solid筆記函式賦值
- Solidity語言學習筆記————1、初識Solidity語言Solid筆記
- Solidity語言學習筆記————38、Solidity彙編Solid筆記
- c語言學習筆記===函式C語言筆記函式
- Solidity語言學習筆記————36、 庫Solid筆記
- Solidity語言學習筆記————37、Using forSolid筆記
- Solidity語言學習筆記————4、常量Solid筆記
- Solidity語言學習筆記————33、事件(Events)Solid筆記事件
- Solidity語言學習筆記————12、陣列Solid筆記陣列
- Solidity語言學習筆記————34、繼承Solid筆記繼承
- Solidity語言學習筆記————43、安全考量Solid筆記
- Solidity語言學習筆記————42、提示和技巧Solid筆記
- Solidity語言學習筆記————16、對映MappingSolid筆記APP
- Solidity語言學習筆記————32、建立合約Solid筆記
- Solidity語言學習筆記————21、函式的訪問許可權和可見性Solid筆記函式訪問許可權
- Solidity語言學習筆記————11、隱式轉換和顯式轉換Solid筆記
- 【Go】Go語言學習筆記-2-函式Go筆記函式
- Solidity語言學習筆記————41、記憶體佈局Solid筆記記憶體
- Solidity語言學習筆記————39、獨立彙編Solid筆記
- Solidity語言學習筆記————25、作用域和宣告Solid筆記
- Solidity語言學習筆記————10、布林型、整型Solid筆記
- Solidity語言學習筆記————3、Remix的基本使用Solid筆記REM
- Solidity語言學習筆記————15、結構體StructSolid筆記結構體Struct
- Solidity語言學習筆記————14、左值運算子Solid筆記
- Solidity語言學習筆記————9、左值運算子Solid筆記
- Solidity語言學習筆記————17、原始檔對映Solid筆記
- Solidity語言學習筆記————5、全域性變數Solid筆記變數
- Solidity語言學習筆記————2、使用編譯器Solid筆記編譯
- Solidity語言學習筆記————19、函式可見性定義符、修飾符、保留字和語法Solid筆記函式
- Solidity語言學習筆記————35、抽象合約和介面Solid筆記抽象
- Solidity語言學習筆記————26、Assert, Require, Revert 和 ExceptionsSolid筆記UIException
- Solidity語言學習筆記————22、可見性和GettersSolid筆記
- Solidity語言學習筆記————24、輸入輸出引數Solid筆記