易表在线答疑技术与交流用户社区 → 最简单的eval语句,能读懂吗?


  共有8263人关注过本帖树形打印复制链接

主题:最简单的eval语句,能读懂吗?

帅哥哟,离线,有人找我吗?
Egei
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:238 积分:882 威望:0 精华:0 注册:2012/4/11 10:40:00
最简单的eval语句,能读懂吗?  发帖心情 Post By:2012/7/2 10:49:00 [只看该作者]

Eval语句,是易表绕不过的砍。但大部分新手遇到这个eval恐怕都挺头疼的。

为什么呢?我想是因为

1、原版的说明文件,对eval的介绍很不清晰详细,大家无法参透eval函数的运行方法和过程。

2、对一些最简的eval语句也不知道是这么执行的。(我也是不知道,今天特开贴请教)

 

先距离几个最简单的语句。来看看eval可以做什么。如果哪位大侠能对每一句都作出解释,说明真正掌握了eval

eval(9) 计算结果 9

eval(9+1)计算结果 10

这是最基本的意义,大家都会

下面再测试字符串

 

eval(a) 运行提示 a是不可识别的变量,说明这种情况下eval会把a当变量

 

eval("a")运行结果为 空。这是为什么呢?我没弄懂,eval没有报错,那eval到底对"a"做了些什么呢?eval内部代码是什么? 还有eval("a""")和 eval("""a")运行不报错,但运算结果为空 他们的效果和本质是一样的吗?

 

eval(""a"")运行提示 语法错误。为什么呢?

 

eval("""a""")运行结果为字符a。这又是怎么得来的。

 

eval("""a"""+"""b""")运行结果为a"b 这又怎么解释?

 

请老师赐教,解释好最简单的eval对我们理解eval很重要

 


 回到顶部
帅哥哟,离线,有人找我吗?
wjq1072
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:16190 积分:125850 威望:1 精华:0 注册:2006/8/12 12:29:00
  发帖心情 Post By:2012/7/2 10:53:00 [只看该作者]

http://www.egrid2000.com/dvbbs/dispbbs.asp?boardid=2&Id=5478&page=2&star=3

 回到顶部
帅哥哟,离线,有人找我吗?
wjq1072
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:16190 积分:125850 威望:1 精华:0 注册:2006/8/12 12:29:00
  发帖心情 Post By:2012/7/2 17:27:00 [只看该作者]

eval可以对指定的表达式求值,例如eval(1+1)=2 ,
而eval("[数量] * [单价]")可以求出金额。
eval函数可以在运行过程中动态生成表达式,然后再求得这个表达式的值。

**关键是准确写出eval中的"表达式"**作为字符串中的引号"放在eval中必须加倍**

一、数值运算表达式:
   2+3;(3+5)/2;-----
用eval对数值表达式求值:
eval(2+2)=4--直接把2+2作为数值表达式执行运算
eval("2+2")=4--把字符型表达式2+2直接进行运算
eval(""2+2"")--语法错误!
eval("""2+2""")=2+2--执行后成为一字符串2+2没有运算
eval(Eval("""2+2"""))=4--再执行一次就运算了

二、字符串表达式:
要表示字符串abcd可以:"abcd";也可以:"ab"+"cd"
用eval对字符串表达式求值:
eval(abcd)--这时没有把abcd作为表达式,而是作为一个变量abcd。
eval("abcd")--这时把abcd作为表达式,而这个表达式无意义,结果为空。
eval(""abcd"")--语法错误!
eval("""abcd""")--这时把"abcd"作为表达式,执行结果为一字符串abcd

eval(""ab"+"cd"")--语法错误!
eval("""ab""+""cd""")--执行结果为一字符串abcd
eval("""ab"""+"""cd""")--与eval("""ab""+""cd""")比较多了二个引号"",执行结果为一字符串ab"cd

eval(Abs(2-8))=6--这时把Abs(2-8)作为表达式,执行结果当然为6
eval(""Abs(2-8)"")--语法错误!
eval("""Abs(2-8)""")=Abs(2-8)--执行后成为一字符串Abs(2-8)没有运算
再执行一次eval(eval("""Abs(2-8)"""))=6


 回到顶部
帅哥哟,离线,有人找我吗?
swg-1954
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:蝙蝠侠 帖子:820 积分:2154 威望:0 精华:0 注册:2010/5/12 19:07:00
  发帖心情 Post By:2012/7/3 20:04:00 [只看该作者]

wjq1072管理员讲得精辟,好,太有帮助了。谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
Egei
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:238 积分:882 威望:0 精华:0 注册:2012/4/11 10:40:00
  发帖心情 Post By:2012/7/24 2:49:00 [只看该作者]

eval("""ab"""+"""cd""")--与eval("""ab""+""cd""")比较多了二个引号"",执行结果为一字符串ab"cd

既然是多了2个引号,那结果为什么不是 ab""cd呢


 回到顶部