--- title: 'Solidity WTF 102 16 單元' lang: zh-tw --- Solidity WTF 102 16 單元 === :::info :date: 2024/10/01 ::: [TOC] # 課程學習 ## 函數重載 假設有兩個函數名稱相同,但帶入的參數不同,則會視為不同的函數。 ```xml= function saySomething() public pure returns(string memory){ return("Nothing"); } function saySomething(string memory something) public pure returns(string memory){ return(something); } ``` 這樣如果要處理相同商業邏輯,但會因不同帶入的參數做出相對應的處理方式,可以使用此方法。 ## 參數匹配 使用上述方法,可以避免在多寫入一個判斷式,可以解省一些問題時間,但如果遇到下列程式。 ```xml= function f(uint8 _in) public pure returns (uint8 out) { out = _in; } function f(uint256 _in) public pure returns (uint256 out) { out = _in; } ``` 會因為輸入的參數既可以是`uint8`,也可以是`uint256`,`Solidity`無法辨別,故會報錯。 :::success 可以加入任意參數解決此問題。 ::: ## 函數分辨方法 他會進行`keccak256`加密方式,把`function`名稱與帶入參數進行加密,以進行分辨。 ```xml= <!-- 會用這種方是去看函數的哈希值,並進行分辨 --> keccak256(saySomething(string memory something)) ```  ```xml= <!-- 這是另一種相同名稱函數 --> keccak256(saySomething()) ```  會是截然不同的哈希值。 ## 為何uint無法分辨 儘管`uint8`和`uint256`在`keccak256`加密會是不同哈希值,但是`EVM`會在處理`ABI`編碼時,自動將`uint8`轉變成`uint256`,這是因為`EVM`在執行時會將所有整數類型擴展成`32`字節(`byte`)的表示形式(即`uint256`)。 ## 本章重點 :::warning 本章重點我認為在參數匹配問題。 :::
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up