首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方案简单规避

方案简单规避
EN

Stack Overflow用户
提问于 2020-11-08 16:21:14
回答 1查看 55关注 0票数 1

我目前正在学习计划,作为我正在修的课程的一部分。它被教导给我的方式是慷慨地使用eval表达式,并且我正在测试的大多数示例都不像描述的那样工作。我读得越多,显然我就不应该这么随意地使用eval了。我在javaScript中看到了一些规避方法,但我正在寻找一些特定的方案。

这个链接提供了一些信息,说明在什么时候可能有必要。这并不能帮我找到一个好的规避方法。

这个链接有更好的信息,但没有给出任何方法来避免在我的情况下。

这个链接最接近于回答我的问题,并帮助我理解了为何eval不一定像预期的那样工作,但我仍然不清楚,什么才能很好地替代eval表达式。

我正在寻找的是标准的方式来实现这一点:

代码语言:javascript
复制
(define (add a_list)
    (cond
        ((null? a_list) 0)
        (eval(cons '+ a_list)))
)

(add '(3 4 8 12 30))

如果不使用eval,则返回57。目前它返回(+ 3 4 8 12 30)这个链接似乎暗示,(+ 34)将自动计算为7,但我得到的只是打印给我的列表,作为一个没有计算的表达式。

它将很好地写成以下方式:

代码语言:javascript
复制
(define (add a_list)
    (cond
        ((null? a_list) 0)
        (eval(eval(cons '+ a_list))))
)

(add '(3 4 8 12 30))

返回57,但其中一个evals似乎什么也不做。以及:

代码语言:javascript
复制
(define (add a_list)
  (eval(cons '+ a_list))
)

(add '(3 4 8 12 30))

返回57,但不检查空列表。

任何帮助完全删除它(或只使用它,如果绝对必要),将不胜感激。

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-08 18:28:25

对于前面提到的例子,您不需要eval,一个简单的apply就可以工作。而且你的怀疑是正确的,我们大多数时候都应该避免使用eval --它被认为是“邪恶的”。

代码语言:javascript
复制
(define (add a_list)
  (apply + a_list))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64740349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档