# Solidity语法：函数定义时特别的传参方式

By [石小龙](https://paragraph.com/@0x994cd38723375a0eb0d55fcbc1e2a862fd49d007) · 2024-11-19

---

*   **只传递参数类型，而不传递任何参数**
    
    *   这种语法只有在C和C++中有类似的实现，其他任何语言中都没有，这点还是很特别的
        
*   示例代码
    
            function afterSwap(address, PoolKey calldata key, IPoolManager.SwapParams calldata, BalanceDelta, bytes calldata)
                external
                override
                returns (bytes4, int128)
            {
                afterSwapCount[key.toId()]++;
                return (BaseHook.afterSwap.selector, 0);
            }
        
    
    *   能够看到，该代码中定义的函数`afterSwap` 有些参数占位符很特别，比如第一个**address**, 一般的函数写法都得有一个参数类型+一个参数名称，而**address**就孤零零的一个，这里的意思是只有变量类型，而省略的是**参数**，省略的目的是因为在函数内根本不会用到该参数；
        
    *   该种函数传参的使用场景
        
        *   当函数需要某个占位符，但是函数内部逻辑暂时不需要处理该参数的时候；
            
        *   由于如果传参了，函数内部却没有调用，那么代码在编译环节会不通过，会有编译报错；
            
        *   故，该种语法特性兼容了满足需求，但是又能通过编译的特性

---

*Originally published on [石小龙](https://paragraph.com/@0x994cd38723375a0eb0d55fcbc1e2a862fd49d007/solidity)*
