Project1

标题: if...else...end 如何简写 [打印本页]

作者: gaofei677    时间: 2013-10-5 10:41
标题: if...else...end 如何简写
想要把
  1. if ...
  2.   ...
  3. else
  4.   ...
  5. end
复制代码
还有
  1. if ...
  2.   ...
  3. elsif
  4.   ...
  5. else
  6.   ...
  7. end
复制代码
都简写,写到同一行里面,这样简便
我记得好像
  1. if ... : ...
复制代码
类似的写法,但是我不知道,求大家指导
作者: 余烬之中    时间: 2013-10-5 10:47
  1. 条件 ? 表达式1 : 表达式2
复制代码
判断条件,满足时返回表达式1,否则返回表达式2
  1. 语句 if 条件
复制代码
条件满足时,执行语句
  1. if 条件 then 语句1 else 语句2 end
复制代码
条件满足,执行语句1,否则执行语句2
其中语句1可以省略,但是then和else要保留
上面的if都可以换成unless
作者: gaofei677    时间: 2013-10-5 10:50
余烬之中 发表于 2013-10-5 10:47
判断条件,满足时返回表达式1,否则返回表达式2条件满足时,执行语句条件满足,执行语句1,否则执行语句2
...

第一种可以写成
  1. 条件 ? 表达式1 : 表达式2 : 表达式3 ......
复制代码
这样后面无限写吗
作者: xTsukihime    时间: 2013-10-5 11:21
本帖最后由 xTsukihime 于 2013-10-6 02:47 编辑
  1. ... ? true1 : ... ? true2 : false
复制代码
=

  1. if ...
  2.    true1
  3. else
  4.    if ...
  5.      true2
  6.    else
  7.      false
  8.    end
  9. end
复制代码
=

  1. if ...
  2.   true1
  3. elsif ...
  4.   true2
  5. else
  6.   false
  7. end
复制代码

作者: 无脑之人    时间: 2013-10-5 13:00
[条件] ? [语句1] : [语句2]
如果条件为真,那么整个语句的返回值为[语句1]的值,否则为[语句2]的值
而这个本身又是一个语句,因此
[条件1] ? [语句1] : [条件2] ? [语句2] : [语句3] #相当于把[条件2] ? [语句2] : [语句3] 作为原本的语句2
[条件1] ? [条件2] ? [语句1] : [语句2] : [语句3] #相当于把[条件2] ? [语句1] : [语句2] 作为原本的语句1
[条件1] ? [条件2] ? [语句1] : [语句2] : [条件3] ? [语句3] : [语句4]  #……
以此类推,不过这种格式用得多了会使代码变得难懂,请酌情使用
作者: 铅笔描绘的思念    时间: 2013-10-5 13:01
一行版 if...;elsif...;else...;end ruby中;号也可以当结束之前语句用。。
作者: 竹君    时间: 2013-10-5 16:09
gaofei677 发表于 2013-10-5 10:50
第一种可以写成这样后面无限写吗

你这种还可以用
  1. case 条件
  2. when 结果1
  3.     表达式1
  4. when 结果2
  5.     表达式2
  6. when 结果3
  7.     表达式3
  8. ....
  9. when 结果n
  10.     表达式n
  11. else
  12.     表达式n+1
  13. end
复制代码
这种形式。
话说你干嘛要写作一行啊!也不嫌看得慌!
嵌来嵌去的很容易就出错哦!

作者: 浩然-Shuenhoy    时间: 2013-10-5 18:20
  1. class Ifobj
  2. def init(x)
  3.   self.x=x
  4. end
  5. def t(&b)
  6.    self.c=&b
  7. end
  8. def e(%b)
  9.   self.e=&b
  10. end
  11. def o
  12.   if self.x.call
  13.     self.t.call
  14.   else
  15.     self.e.call
  16.   end
  17. end
  18. end
  19. def i(&b)
  20.   Ifobj.new
  21.   Ifobj.init &b
  22.   Ifobj
  23. end
复制代码
这样然后大概就能
p i{a>b}.t{1}.e{2}.o
了吧(雾




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1