不应该返回6而不是8吗?它是否以这种方式工作,使用表达式组合返回一个大表达式,这应该评估为2+2*2
instaed (2+2)*2
static void Main(string[] args)
{
var response = Mul();
var result = response.Compile().Invoke();
}
public static Expression<Func<double>> Add()
{
return Expression.Lambda<Func<double>>(Expression.Add(EvaluateConst().Body, EvaluateConst().Body));
}
public static Expression<Func<double>> Mul()
{
return Expression.Lambda<Func<double>>(Expression.Multiply(EvaluateConst().Body, Add().Body));
}
public static Expression<Func<double>> EvaluateConst()
{
return () => 2;
}
答案 0 :(得分:4)
返回值“8”在这里有意义。
在运行$contacts_needed = array('tom','joe');
$all_contacts = array(
'tom' => array('age'=>20, 'sex'=>'m'),
'jack' => array('age'=>33, 'sex'=>'f'),
'rob' => array('age'=>33, 'sex'=>'m'),
'joe' => array('age'=>33, 'sex'=>'m'),
'jill' => array('age'=>20, 'sex'=>'f'),
);
$contacts = array_intersect_key($all_contacts, array_flip($contacts_needed));
print_r($contacts);
之前,必须完全确定其参数。所以每个函数都运行。
2 * 4是8。
答案 1 :(得分:3)
不,不应该。如果它应该有,它会有。你的指令是将2乘以加法结果,因为你将2和加法结果作为乘法运算。
答案 2 :(得分:1)
您将操作符作为函数的参数传递。虽然编译器可以看到2+2*2
并跳转到Add(2, Multiply(2, 2))
,但表达式却没有。一个简单的方法是思考(或者更确切地说,实现,因为它是真的)运算符是静态函数,或用方法调用表达式替换运算符表达式。