2

私が持っているとしましょう

o: context [

  f: func[message /refine message2][
    print [message] 
    if refine [print message 2]
  ]

]

私はこのようにそれを呼び出すことができます

do get in o 'f "hello"

しかし、洗練のためにどうすればいいですか?うまくいくこのようなもの

>> do get in o 'f/refine "hello" "world"
** Script Error: in expected word argument of type: any-word
** Near: do get in o 'f/refine
>>
4

3 に答える 3

2

関数値を呼び出す際に絞り込みを使用するようにインタープリターに直接指示する方法があるかどうかはわかりません。doそれには、その引数がfunction! 存在するような何もない場合のパラメーター化が必要になります...しかし、おそらくそれはどこかに隠されています。

絞り込みを使用する唯一の方法は、パスを使用することです。明確にするために、まず一時的な単語を使用します。

>> fword: get in o 'f
>> do compose [(to-path [fword refine]) "hello" "world"]  
hello
world

作成後に 2 番目のステートメントが評価されるのは次のとおりです。

do [fword/refine "hello" "world"]

関数の値を実際にパスに入れることもできます。仲介者の必要性を取り除きます。

>> do compose [(to-path compose [(get in o 'f) refine]) "hello" "world"]
hello
world

PS との間に余分なスペースが messageあり2ます。message2

于 2009-12-19T21:26:32.027 に答える
1

これを行う:

o/('f)/refine "hello" "world"

パス式の括弧は、オブジェクト フィールドまたはシリーズの pick/poke インデックス参照に対応する場合に評価されます。これにより、上記のコードは次と同等になります。

apply get in o 'f ["hello" true "world"]

apply引数は位置指定であるため、引数が宣言された順序を知る必要があることに注意してください。関数の絞り込み自体でそのトリックを行うことはできないためapply、絞り込みをパラメーター化する場合は、パス式を使用または作成して評価する必要があります。関数呼び出しの。

于 2013-10-03T17:26:51.700 に答える
-1

単純なパスo/f/refineを使用します

于 2009-12-17T11:20:28.430 に答える