Use el mismo nombre de argumento en el modificador y la función

Si tengo una funcion

function b(address _foo) verifySomeClause {
}

y un modificador que puede tomar diferentes direcciones como argumento, por lo que msg.senderpuede 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?

Respuestas (1)

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 cvoluntad 'extiende' el function b, que es lo que se supone que debe hacer. Pero cuando se realiza esta llamada, msg.senderya tiene un valor, y proporcionará el valor para el argumento _fooal llamar al function b.

He agregado el event printpara que sea obvio que esas son dos variables diferentes vinculadas a diferentes variables. Si ejecuta el contrato y llama function bcon un valor diferente del msg.sender, notará que ambos valores se emitirán en los eventos.