编辑:我未能与我的用例分享更为相关的MWE。
我无法让eval()
使用合适的环境。
> f = function(x) {eval.parent(parse(text = x))}
> h = Vectorize(f, "x")
> g = function() {a = 2; h("a")}
> a = 1
> h("a")
a
1
> g()
a
1
上面,我希望g()
返回2
。
顺便说一句:我在environments和non-standard evaluation上阅读了Hadley的章节。
答案 0 :(得分:0)
(原始问题)这将从func session(_ session: WCSession, didReceiveMessage message: [String : Any],
replyHandler: @escaping ([String : Any]) -> Void)
中提取正文表达式并将其评估为f
的本地表达式:
g
也可以试试这个:
f = function(x) {eval(parse(text = x))}
g = function() {a = 2; eval( body(f), envir = list(x="a"))}
> g()
[1] 2
对于downvoter:解释为什么答案“无用”被认为是礼貌的。否则我们会猜测可能引发投票的方面(正确性,可取性或???)。
编辑之后:现在这将提供所要求的结果,并且可能以不太可能具有攻击性的方式对那些坚持严格编码“道德”的人:
> g = function() {a = 2; eval(call("f", a))}
> g()
[1] 2
可以提取Vectorized-function中项目的名称和类:
g = function() {a = 2; environment(h)$FUN(a)}
g()
#[1] 2