4
良い一日、これにより、ブロックの動作とモジュール
を教えてください私はこれで少し困惑しています。
私は最後のDownValues[f]
が与えると期待しています:{HoldPattern[f[x_]]:>ff[x]}
。しかし、それはしません。説明してください。
良い一日、これにより、ブロックの動作とモジュール
を教えてください私はこれで少し困惑しています。
私は最後のDownValues[f]
が与えると期待しています:{HoldPattern[f[x_]]:>ff[x]}
。しかし、それはしません。説明してください。
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]}
が 'module'のためにこの権利ですか?ドキュメンテーションからは明らかではありません。 –
@Alexey私の編集した返答をご覧ください。 – Sasha