2017-10-26 2 views
0

//手続き型作品!!誰でも私がなぜこのコードシーケンスの解決のために手続き型コードが機能するのか、関数が失敗するのかを教えてもらえますか?

$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で失敗するWHY ?????私はこれで壁に向かって頭を叩いた。

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が動作しない場合は、全体の機能は無意味です....私はevalを研究してきたが、E2が失敗した理由を私は知りません。

+0

「作品」と「失敗」を定義します。 – cHao

答えて

0

あなたはそれらの値がない関数内で、その場で計算なっている

$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; }; 

彼らはラムダだたら、eval何もする必要はありません - 実際に、私はあなたにもできることを確認していませんよ。だからevalを取り除く。今

は、eSolverであなたのループ内で、あなたはそれらを評価するために

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

のように言うことができます。

+0

ありがとうございます。私はJavascriptで機能的なコーディングを見ていましたが、それを実装することは考えていませんでしたか、PHPでどのように知っていましたか? Javascriptの無名関数とはまったく変わりません。私はeval()の代わりに無名関数を実装しますあなたは正しいです。 evalを使って実装することはできません。私は寝るまで昨夜何時間も起きました。もう一度ありがとう! –

+0

これは 'eval'を使って実装できますが、それは間違ったアプローチです。あなたが計算したいものを知っているとき、それは文字列よりも関数として良い。 – cHao

+0

ちょうどコードのテストを終え、return文をif条件に移さなければならなかったが、それは正常に機能し、手続きよりもうまくいった。機能的なコーディング、赤ちゃん、私にとって全く新しいレベル。あなたは無知の盲目を解き放った:D –

関連する問題