Solidity

在修飾符和函式中使用相同的參數名稱

  • November 6, 2018

如果我有一個功能

function b(address _foo) verifySomeClause {
}

和一個可以將不同地址作為參數的修飾符,因此msg.sender可以是其中之一,

modifier c(address _foo) {
}

並且函式修飾符是這樣呼叫的

function b(address _foo) verifySomeClause(_foo) {
}

像這樣,

function b(address _foo) verifySomeClause(msg.sender) {
}

修飾符和函式具有相同的參數名稱有什麼問題嗎?

不,這樣的聲明沒有問題。要理解這一點,您可能需要研究變數範圍,這是 Solidity 評估程式碼的方式。

看看下面的程式碼:

contract Demo {
   event print(address _foo);

   modifier c (address _foo) {
       emit print(_foo);
       _;
   }
   function b (address _foo) c (msg.sender) {
       emit print(_foo);
   }
}

當你呼叫 時function b,看看它是如何被評估的。將modifier c“擴展” function b,這是它應該做的。但是當這個呼叫被呼叫時,它msg.sender已經有了一個值,並且你將_foo在呼叫function b.

我添加了event print以表明這是綁定到不同變數的兩個不同變數。如果您執行合約並function b使用與 不同的值進行呼叫msg.sender,您會注意到這兩個值都將在事件中發出。

引用自:https://ethereum.stackexchange.com/questions/61807