天天好味道

没钱没权没户口,靠走靠吼靠小狗
随笔 - 66, 文章 - 1, 评论 - 524, 引用 - 5

导航

<2006年7月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

留言簿(12)

随笔分类

随笔档案

文章档案

我的链接

搜索

最新评论

阅读排行榜

评论排行榜

程序员是不是都有点虚荣呢?

从Lua想起来的。 我们的嵌入式系统需要选一个Script Engine。在通讯行业,TCL是最广为人知的,
可惜在WinCE上实在是扶不起来,慢的要命,有时候还Crash,更糟糕的是,我没有找到SourceCode..
据说是有的,但是需要n多步骤才有可能编译成功。我实在不敢把命运寄托在一份没有充分测试过的
二进制发行版上。其实很早就像领导推荐Lua了,因为我在CE上编译成功了他的代码,并且测试过
如扩展C函数等功能,速度也不错。不过领导不愿意让我们的用户学习一种新的语言。所以我今天
打算自己学习一下,看看难不难。看了一下,立刻感到胸口发闷,怒发冲冠:

1.
逻辑运算
    and, or, not
    其中,and 和 or 与C语言区别特别大。
    在这里,请先记住,在Lua中,只有false和nil才计算为false,其它任何数据都计算为true,0也是true!
    and 和 or的运算结果不是true和false,而是和它的两个操作数相关。
    a and b:如果a为false,则返回a;否则返回b
    a or b:如果 a 为true,则返回a;否则返回b

    举几个例子:
     print(4 and 5) --> 5
     print(nil and 13) --> nil
     print(false and 13) --> false
     print(4 or 5) --> 4
     print(false or 5) --> 5

我没理解Lua为什么这么设计,也许是为了方便的处理某种特定的问题吧。可是他为什么不能
提供一种其它所有语言一致的 and ,or,的含义,并且使用大家所熟悉的关键字来表示呢?

2.
比较运算
    < > <= >= == ~=

从 == 来看,跟C/C++一路的,可是为什么用~=表示不等于? (Python用<>,也很无聊)

程序员是不是为了表明自己与众不同而这么做的?这是不是一种虚荣心的表现? 更进一步说,是不是
OpenSource阵营的程序员对扬名立万更加在意? (因为他们不为了钱)


郁闷的回家吃饭,明天开会,到底应该建议用哪种脚本呢?

posted on 2006-07-17 18:21 jzhang 阅读(1126) 评论(8)  编辑 收藏

评论

# re: 程序员是不是都有点虚荣呢?

感觉你懂的脚本好多啊。
2006-07-17 20:52 | 晓寒

# re: 程序员是不是都有点虚荣呢?

lua有源代码,你完全可以自己修改它成为你需要的样子。
2006-07-17 23:43 | Panic

# re: 程序员是不是都有点虚荣呢?

自己写个脚本解释器吧,如果你写的不好,大约需要3000行,如果你写的好,大约需要1000行,如果你能有盖茨的本事,只需要写汇编4K。嘿嘿,向盖茨同志学习吧
2006-07-18 00:21 | 老梆菜

# re: 程序员是不是都有点虚荣呢?

to 晓寒, Lua我是昨天才看了语法的。 TCL是工作用的。
to Panic,那就要单独立项目了,阅读代码,修改,测试...
to 老梆菜,上一家公司的产品的脚本就是公司自己实现的,不过我觉得不划算,费很大力气维护和升级,还偶尔出点bug.
2006-07-18 08:29 | jzhang

# re: 程序员是不是都有点虚荣呢?


大概,可能,也许,maybe 是因为写一样了怕有版权问题吧! 哈哈
2006-07-18 09:40 | 玻璃小屋

# re: 程序员是不是都有点虚荣呢?

Python 中的逻辑运算,and 和 or 并不是像c/c++类的语言一样,返回 true或者 false。他们的返回值(return value)是两个操作符(operantor)中,其中一个的值。 这个特点似乎在同是脚本语言的lua中也是一样。 实际上这种设计还是很合乎逻辑的,也有用处。比如以前我曾经不解类似c语言中 condition?a:b 这种语句在python中的写法,在水木上得到指教,用 and 和 or 就可以很简洁地表达出来。

    r = cond and x or y

Python 2.4文档的 5.10 中也提到了: Note that neither and nor or restrict the value and type they return to False and True, but rather return the last evaluated argument. This is sometimes useful, e.g., if s is a string that should be replaced by a default value if it is empty, the expression s or ‘foo’ yields the desired value. Because not has to invent a value anyway, it does not bother to return a value of the same type as its argument, so e.g., not ‘foo’ yields False, not ‘’. 举的例子是:“如果为空(非法值、失败)的话就使用默认值”,简洁的表达。所以这里的 x and y 可以理解为:先x,“然后再” y。是不是让 and 这个词回归本来的语义了呢?同理,x or y就是:如果x 不成的话,y (为真)也行啊。如果上面的 x, y 都是函数的话,x or y or z… 就是 “从左到右执行这些操作,直到其中一个成功为止” 。 x and y and z… 就是“从左到右执行这些操作,有一个失败就拉倒”。如果 and 和 or 组合起来,意思就更丰富了。这不正是脚本语言所追求的吗? 不能从c/c++的角度来理解脚本语言。
2006-07-18 12:07 | Charlie Zhu

# 固陋了,谢谢!~

不过还是没办法把这种东西交给用户使用。否则不知道会写出多少意想不到的代码来
2006-07-18 12:36 | jzhang

# re: 程序员是不是都有点虚荣呢?

估计人家申请专利了,哈哈
2006-07-20 21:26 | 一笑
标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]