论坛首页 入门技术论坛

ruby 怪异的while循环处理,和java的差别

浏览 8026 次
该帖已经被评为新手帖
作者 正文
   发表时间:2006-11-05  
我在 ruby user's guide 上面看到这样一段代码:
a = 123
klass = a.class
while klass do
  print klass
  klass = klass.superclass
  puts " <<<< " 
end

开始以为作者些错了,但是后来一运行,居然是可以的,他的 while调见怎么能不是一个 boolean表达式呢?我看他的书上没有什么特殊的用法啊? 这句话:
while klass
根本不是一个boolean 表达式,他的意思应该是直到
while nil
的时候就停止循环,这样使用也可以么?
   发表时间:2006-11-05  
我觉得在这里发这种问题帖很危险的
0 请登录后投票
   发表时间:2006-11-05  
我也这么认为
0 请登录后投票
   发表时间:2006-11-05  
好像脚本语言都是这样的吧。
只不过对假值的认定上各自之间都有微妙的差别,还引起过哲学高度上的争论
0 请登录后投票
   发表时间:2006-11-05  
ruby 中 非nil就是true,这种问题和哲学有什么关系,完全是一个语法定义的问题。
0 请登录后投票
   发表时间:2006-11-05  
jack 写道
ruby 中 非nil就是true,这种问题和哲学有什么关系,完全是一个语法定义的问题。

这和哲学有关系。确切的说是和逻辑有关系。
1和0,真和假,这是经典逻辑原则。
ruby中“not 0”的结果居然是"false",这太让人惊讶和意外了。
谁能给个ruby的解释,说说有没有办法让人感到不意外的办法。
另外,“非nil就是true”这个命题不成立。例如:false非nil,但false不是true
0 请登录后投票
   发表时间:2006-11-05  
axgle 写道
jack 写道
ruby 中 非nil就是true,这种问题和哲学有什么关系,完全是一个语法定义的问题。

这和哲学有关系。确切的说是和逻辑有关系。
1和0,真和假,这是经典逻辑原则。
ruby中“not 0”的结果居然是"false",这太让人惊讶和意外了。
谁能给个ruby的解释,说说有没有办法让人感到不意外的办法。
另外,“非nil就是true”这个命题不成立。例如:false非nil,但false不是true

nil和false都被当作false,除此之外都是true。
以后有问题麻烦先去看看Programming Ruby行不行呢?
0 请登录后投票
   发表时间:2006-11-05  
axgle 写道
jack 写道
ruby 中 非nil就是true,这种问题和哲学有什么关系,完全是一个语法定义的问题。

这和哲学有关系。确切的说是和逻辑有关系。
1和0,真和假,这是经典逻辑原则。
ruby中“not 0”的结果居然是"false",这太让人惊讶和意外了。
谁能给个ruby的解释,说说有没有办法让人感到不意外的办法。
另外,“非nil就是true”这个命题不成立。例如:false非nil,但false不是true


抱歉 我少记了一条。

ruby是这样定义true的
引用

Ruby has a simple definition of truth. Any value that is not nil or the constant false
is true


关于not 0,可以这样理解
0是非nil ,所以 0代表true,在 not操作,于是得出false

另外 别什么都扯到哲学上。
0 请登录后投票
   发表时间:2006-11-05  
...
0 请登录后投票
   发表时间:2006-11-05  
在OO语言里把0定义成false才是令人惊讶的,
0也是一个object,只不过它的值恰好等于数字0罢了
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics