Solidity
字元串的零值是多少?
如何驗證映射內的字元串或僅具有字元串屬性的列舉是否已初始化?
根據文件,這意味著檢查映射的元素是否為 0 值,在談論字元串時我不清楚。
contract C { mapping (address => string) m1; mapping (address => StringStruct) m2; struct StringStruct { string someString; // Always defined when initialising this struct // There could be other string properties here... } function amIInBothMappings() returns (bool) { // Check that both m1[msg.sender] and m2[msg.sender].someString are non-0 } }
在範例中:實現在映射 m1 和 m2 中未初始化的
amIInBothMappings
檢查的最佳方法是什麼?msg.sender
一種方法是檢查字元串的長度:
if (bytes(m1[msg.sender]).length != 0 && bytes(m2[msg.sender].someString).length != 0) // do your thing
請參閱我在此處發布的答案
另一種方法是比較字元串的 sha3 雜湊值
if (sha3(myVariable) != sha3("")) { // is not empty string }
但是,這種方法可能效率較低。