contract A {
uint public a;
uint public b;
uint public c;
function setABCD(uint _a, uint _b, uint _c) public {
(a, b, c) = (_a, _b, _c);
}
function ABC() public view returns(string memory) {
require(a == 0 && b != 1 || c == 0);
return "pass";
}
function ABC2() public view returns(string memory) {
require(a == 0 || b != 1 && c == 0);
return "pass";
}
}
&&(and), ||(or) 연산자의 위치에 따라 헷갈릴 수가 있다.
쉽게 생각하면 and끼리 먼저 묶이고 or로 나뉜다고 생각하면 될 것 같다.
그리고소괄호()
로도 묶어줄수가 있는데 괄호를 쓰면 먼저 묶인다고 생각하면 될듯.
contract B {
function deposit() public payable {}
uint eth = 1 ether
function transferTo(address payable _to, uint amount) public {
_to.transfer(amount * eth);
}
}
contract C1 {
function deposit() public payable {}
receive() external payable{}
}
contract C2 {
function deposit() public payable {}
}
- B:
deposit
/transferTo
- C1:
deposit
/receive
- C2:
deposit
만
result
B(transferTo) -> C1 (O)
B(transferTo) -> C2 (X) receive없기 때문에
deposit은 다 가능. payable 있어서