В общем, нормально ли вызывать fun () в качестве аргумента, например ethToWeiConverter
в приведенном ниже примере? Иначе какой стиль предпочтительнее?
contract RefundableCrowdsale { uint256 cap ;
RefundableCrowdsale ( uint256 _cap ) { cap = _cap ;
}
} contract MyCrowdsale is RefundableCrowdsale {
// constructor
function MyCrowdsale ( cap ) RefundableCrowdsale ( ethToWeiConverter ( cap )
) {
...
}
function ethToWeiConverter ( uint256 eths ) returns ( uint256 ) {
return eths * 10 ** 18
}
}
Да, можно передавать функции в качестве параметров. Из комментария к Этдев Кристис
pragma solidity ^ 0.4 . 15 ; contract B {
function plus ( uint a , uint b ) internal returns ( uint ) {
return a + b ;
}
function minus ( uint a , uint b ) internal returns ( uint ) {
return a - b ;
}
function eval ( function ( uint , uint ) internal returns ( uint ) f , uint x , uint y ) internal returns ( uint ) {
return f ( x , y );
}
function calc ( uint op , uint x , uint y ) constant public returns ( uint ) {
function ( uint , uint ) internal returns ( uint ) g ;
if ( op == 0 ) { g = plus ;
} else if ( op == 1 ) { g = minus ;
}
return eval ( g , x , y );
}
}
Примечание: это не компилируется в ремикс, парсер запутывается.
Эдуардо Перейра
Jamland
manuhalo