Solidity
在修飾符和函式中使用相同的參數名稱
如果我有一個功能
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
,您會注意到這兩個值都將在事件中發出。