Si tengo una funcion
function b(address _foo) verifySomeClause {
}
y un modificador que puede tomar diferentes direcciones como argumento, por lo que msg.sender
puede ser uno de esos,
modifier c(address _foo) {
}
y el modificador de función se llama así
function b(address _foo) verifySomeClause(_foo) {
}
y así,
function b(address _foo) verifySomeClause(msg.sender) {
}
¿Hay algún problema con tener el mismo nombre de argumento para el modificador y la función?
No, no hay problemas con tal declaración. Para comprender esto, es posible que desee analizar el alcance de las variables , que es cómo Solidity evaluaría el código.
Echa un vistazo al código a continuación:
contract Demo {
event print(address _foo);
modifier c (address _foo) {
emit print(_foo);
_;
}
function b (address _foo) c (msg.sender) {
emit print(_foo);
}
}
Cuando llame al function b
, observe cómo se evaluará. La modifier c
voluntad 'extiende' el function b
, que es lo que se supone que debe hacer. Pero cuando se realiza esta llamada, msg.sender
ya tiene un valor, y proporcionará el valor para el argumento _foo
al llamar al function b
.
He agregado el event print
para que sea obvio que esas son dos variables diferentes vinculadas a diferentes variables. Si ejecuta el contrato y llama function b
con un valor diferente del msg.sender
, notará que ambos valores se emitirán en los eventos.