2011-03-09 2 views

答えて

2

Withのドキュメントから。

Withは、exprのシンボルをスコープ構成内のローカル変数として使用しない場合にのみ置き換えます。

モジュールとブロックは、単にそれを意味するものではありません。

ModuleおよびBlockで詳述するようにを編集します。 `理由シンボルは置き換えられません。評価されていないということです。ブロックとモジュールは構文置換操作を行いません。お試しください

f[x_] := Block[{xx = x}, f[xx_] = ff[xx]] 

f[z]を評価してください。

また、あなたが最初の非スコープ構文を使用してあなたの最初の戦略を実行することができます。

f[x_] := With[{xx = x}, 
    Hold[{f[xx_], ff[xx]}] /. {Hold[{a_, b_}] :> SetDelayed[a, b]}] 

In[117]:= DownValues[f] 

Out[117]= {HoldPattern[f[x_]] :> 
    With[{xx = x}, 
    Hold[{f[xx_], ff[xx]}] /. {Hold[{a_, b_}] :> (a := b)}]} 

In[118]:= f[z] 

In[119]:= DownValues[f] 

Out[119]= {HoldPattern[f[z_]] :> ff[z]} 
+0

が 'module'のためにこの権利ですか?ドキュメンテーションからは明らかではありません。 –

+0

@Alexey私の編集した返答をご覧ください。 – Sasha

関連する問題