设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
楼主: DeathKing

[已经解决] if not和unless有什么区别

[复制链接]

Lv1.梦旅人

梦石
0
星屑
60
在线时间
1 小时
注册时间
2009-9-19
帖子
137
发表于 2010-7-5 00:42:46 | 显示全部楼层
回复 DeathKing 的帖子
优先级应该会影响效率的
比如unless的优先级应该比and和or都低,而if not中not的优先级应该比较高
if (not xx) and (xx)和unless (!xx) and xx应该会有区别

以上皆为未测试的猜测。。。我自重去了- -

   
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1015
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

 楼主| 发表于 2010-7-5 00:44:50 | 显示全部楼层
回复
优先级应该会影响效率的
比如unless的优先级应该比and和or都低,而if not中not的优先级应该比较高
if ...
darkdrium 发表于 2010-7-5 00:42


我的原意是if not p和unless p啊。
p为复合条件(的真伪值)。


回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
1 小时
注册时间
2009-9-19
帖子
137
发表于 2010-7-5 00:47:53 | 显示全部楼层
回复 DeathKing 的帖子
oh,先把p用括号复合了么?
那其实我觉得测试结果如1楼所言,应该是无差异才对的- -数量级太低了。。。

话说这个unless,我也是头痛的紧啊,每次看到,脑子都得先转成if not


   

点评

从人类语言的角度来讲,“除非”比“如果不”更易懂,所以增加了代码可读性  发表于 2010-7-5 00:54
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1015
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

 楼主| 发表于 2010-7-5 00:50:44 | 显示全部楼层
回复
oh,先把p用括号复合了么?
那其实我觉得测试结果如1楼所言,应该是无差异才对的- -数量级太低了。。 ...
darkdrium 发表于 2010-7-5 00:47


我不觉得,有个比较好的点子就是(如果不考虑优先级的问题)

unless p   # (p == false)
  exp
else
  exp
end

而 if 则是 if true而已。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
发表于 2010-7-5 00:52:41 | 显示全部楼层
具体看解释器是如何实现的,这个我无从得知,但从汇编方面分析,差别基本上可以无视,就像当年某高手煞有介事的强调 i++ 和 ++i 的区别一样

点评

moy
那个确实有区别...至少在C语言里操作不当读出来的值会不一样...  发表于 2010-7-5 01:24
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
1 小时
注册时间
2009-9-19
帖子
137
发表于 2010-7-5 00:58:21 | 显示全部楼层
本帖最后由 darkdrium 于 2010-7-5 01:00 编辑

回复 紫苏 的帖子

本来想点评的,结果回复了自己一个空帖子,防止被版主抓到而已灌水,将点评放到这里了。。。

从人类语言的角度来讲,它应该还有个否则。。。所以个人觉得挺别扭。比如:除非明天下雨,(否则)我们去吃火锅

   
   

点评

unless 后面可以有 else。。。。  发表于 2010-7-5 01:11
no。。。unless加了else,跟否则的意思就不一样了 unless 明天下雨 我们去吃火锅 end 这个跟“否则就去吃火锅”是一个意思  发表于 2010-7-5 01:05
unless 后面可以有 else。。。。  发表于 2010-7-5 01:02
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1015
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

 楼主| 发表于 2010-7-5 00:59:37 | 显示全部楼层
回复 紫苏 的帖子

的确,i++和++i的区别貌似还是很大。

应该就是这个意思,貌似和“结合能力”扯上关系:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int i = 1,a,b;
  5. a = i++;
  6. b = ++i;
  7. printf("%d %d %d",i,a,b);
  8. }
复制代码
输出 3 1 3

++i 是先自加i然后再复制,i++则相反?

点评

这里如果要用 +=,可以让 i 初始为 -1,然后 a[i+=1]  发表于 2010-7-5 13:02
a=[1,2,3,4,5,6] s=0,i=0 while(true){ s+=a[i++] if i=7 break }  发表于 2010-7-5 11:41
+= 不行么? 或者用next方法。 1.next #=>2  发表于 2010-7-5 01:10
话说js有数组取index的时候就++的,愚以为这个语法相当优雅,可惜ruby不能。。。  发表于 2010-7-5 01:07
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
1 小时
注册时间
2009-9-19
帖子
137
发表于 2010-7-5 01:00:51 | 显示全部楼层
回复 DeathKing 的帖子
。。。他应该是说效率上的差别。。。

   
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
1 小时
注册时间
2009-9-19
帖子
137
发表于 2010-7-5 01:03:12 | 显示全部楼层
回复 DeathKing 的帖子
。。。他应该是说效率上的差别。。。

   

点评

网络缘故连帖了,请版主杀了这楼吧- -  发表于 2010-7-5 01:09
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1015
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

 楼主| 发表于 2010-7-5 01:03:49 | 显示全部楼层
回复

本来想点评的,结果回复了自己一个空帖子,防止被版主抓到而已灌水,将点评放到这里了。。。

从人 ...
darkdrium 发表于 2010-7-5 00:58


我们英语老师说,unless你别翻译为除非,要翻译为“如果不”。{:nm_3:}

点评

我也觉得,把unless翻成除非到底是哪个人的脑残翻译,除非是除了不是的意思,除了不是那就是是了,就相当于如果,unless应该翻成不能省去以下条件。  发表于 2010-7-5 09:51
善!就是这么说!我每次都脑补的  发表于 2010-7-5 01:06
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-3-29 13:40

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表