【问题标题】:Why the procedural code works for the solution of this code sequence but the function fails?为什么程序代码适用于此代码序列的解决方案但功能失败?
【发布时间】:2017-10-26 21:36:50
【问题描述】:

//程序性工作!!

$x=0;

$e1=$x/450+1/2; $e2=$x==0?false:6300/$x;

while($e1 !== $e2){ 

  ++$x; 

  $e1=$x/450+1/2; $e2=$x==0?false:6300/$x;

  if($e1 == $e2){
  echo "x Solution:  ". $x . "<br>y Solution:  ".$e1;
  exit;
  }

}

//函数在e2上失败为什么??????我已经把头撞在墙上了。我研究过 eval 但我不知道为什么 e2 失败....

function eSolver($eq1,$eq2){

$x=0;

$e1=eval("return $eq1;"); $e2=eval("return $eq2;");
/*
while($e1 !== $e2){ 

  ++$x; 

  $e1=$eq1; $e2=$eq2;

  if($e1 == $e2){
  $ePoint= "x Solution:  ". $x . "<br>y Solution:  ".$e1;
  exit;
  }

}
*/
return $e2;
}

$supply=$x/450+1/2; $demand=$x==0?false:6300/$x;

echo eSolver($supply,$demand);

//e1 对 e2 不起作用,如果 e2 不起作用,则整个功能毫无意义。

【问题讨论】:

  • 定义“有效”和“失败”。

标签: php eval quadratic procedural


【解决方案1】:

当你说

$supply=$x/450+1/2; $demand=$x==0?false:6300/$x;

这些值是在当时和那里计算出来的,而不是在函数内。您需要将它们包装起来,无论是在引号中传递给eval (ick) 还是在匿名函数中。

$supply = function($x) { return $x/450 + 1/2; };
$demand = function($x) { return ($x == 0) ? false : 6300/$x; };

一旦它们是 lambda,您就不需要 eval 任何东西 - 事实上,我不确定您是否可以。所以摆脱evals。

现在,在eSolver 的循环中,你可以说喜欢

$e1 = $eq1($x); $e2 = $eq2($x);

评估它们。

【讨论】:

  • 谢谢。我在 Javascript 中看到过函数式编码,但从未想过要实现它,或者我知道如何在 PHP 中实现它。它与 Javascript 匿名函数真的没有什么不同。我将实现匿名函数而不是 eval() 你是对的。您无法使用 eval 实现。昨晚我熬了几个小时,直到我不得不上床睡觉。再次感谢!
  • 您可以使用eval 来实现它,但这是一种错误的方法。当您知道要计算什么时,最好将其作为函数而不是字符串。
  • 刚刚完成了代码测试,不得不将 return 语句移到 if true 条件下,但它确实有效,甚至比程序更好,这太棒了。功能编码,宝贝,对我来说是一个全新的水平。你们已经解除了无知的盲目性:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-30
  • 2013-01-02
  • 2015-07-18
  • 1970-01-01
  • 2012-05-08
  • 1970-01-01
相关资源
最近更新 更多