假设我有
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
>>
答案 0 :(得分:2)
我不知道是否有办法直接告诉解释器在调用函数值时使用细化。当do
的参数为function!
时,这需要对>> fword: get in o 'f
>> do compose [(to-path [fword refine]) "hello" "world"]
hello
world
进行一些参数化。似乎没有这样的东西......但也许它隐藏在其他地方。
我知道使用细化的唯一方法是使用路径。为了说清楚,我将首先使用一个临时词:
do [fword/refine "hello" "world"]
撰写之后第二个语句评估的是:
>> do compose [(to-path compose [(get in o 'f) refine]) "hello" "world"]
hello
world
您实际上也可以将函数值放入路径中。它摆脱了中间人的需要:
message
P.S。您在2
和message2
之间有一个额外的空格,它应该只是{{1}}
答案 1 :(得分:1)
这样做:
o/('f)/refine "hello" "world"
如果路径表达式中的Parens对应于object对象或系列pick / poke索引引用,则会对其进行求值。这使得上面的代码等同于:
apply get in o 'f ["hello" true "world"]
请注意,apply
参数是位置的,因此您需要知道参数的声明顺序。您无法使用函数优化本身来完成这一操作,因此您必须使用apply
或创建路径表达式以评估是否要参数化函数调用的细化。
答案 2 :(得分:-1)
使用简单路径o / f / refine