스트링 비교해야 할때 해시함수 돌려서 확인한다.
TypeError: Built-in binary operator == cannot be applied to types string memory and literal_string"abc".
솔리디티 코드를 작성하다보면, 두 스트링 값이 같은지 확인해야 할 때가 있다.
function getString(string memory _s) public pure returns(bool) {
if ( _s == "abc") {
return true;
} else {
return false;
}
}
그러나, 스트링 비교 코드를 작성하면, 타입에러가 발생해 난처할 것이다.
솔리디티는 스트링 비교 시, 해시함수를 돌려 일치여부를 확인해야 한다.
function stringComp(string memory _s) public pure returns(bool) {
if(keccak256(bytes(_s)) == keccak256(bytes("abc"))) {
return true;
} else {
return false;
}
}
같은 스트링 해시하면 같은 값 나온다는 것 활용해서 같은지 판단!!!
function stringComp_eff(string memory _s) public pure returns(bool) {
require(bytes(_s).length ==bytes("abc").length, "No");
if(keccak256(bytes(_s)) == keccak256(bytes("abc"))) {
return true;
} else {
return false;
}
}
함께 참고할 만한 글