编程C,C ++,Java,PHP,Ruby,图灵,VB
计算机科学加拿大 
编程C,C ++,Java,PHP,Ruby,图灵,VB  

用户名:   Password: 
 登记登记   
 [Ruby-Tut]决策,决定......
指数 -> 编程,Ruby. -> 红宝石教程
查看上一个主题 可打印的版本下载主题利率主题订阅本主题私人信息刷新页面 查看下一个主题
作者 信息
WTD.




邮政发布: 星期五2004年6月25日10:07 PM  帖子主题:[Ruby-Tut]决策,决策......

在编程控制程序流的能力时至关重要。 Ruby提供充足的设施来做这件事。

在本教程中,我将修改 以前的教程允许计算机以不同的方式响应我的输入的代码,具体取决于我输入的内容。

如果我输入正常名称,它应该尽可能响应。但是,如果我没有输入,它应该粗鲁地响应,如果我输入嘉文,大线路或SID的名字,它应该发出纳尔逊 - eSque“haaaaa haaaa”。

首先,我想为代码进行一个小的补充。正如我之前发布的那样,它只是读取了一行输入,将其分配给变量名称,然后将其插入另一个字符串,它打印。不幸的是,这不会测试我是否在我的名字的开头或结尾输入一堆空格。我想摆脱无关的空白。

代码:
put"Hello, Ruby!"
打印"I'm "
名称= get.
名称!
put"Ruby says, \"Hello, #{name}\""


额外的行叫条带!对象上的方法我们给出了名称“名称”。 “剥离”表示它正在剥离外观空白,而且是!是该方法永久改变对象的视觉指示。

代码:
名称


以上只是创建一个新的字符串对象,删除该对象中的空白,并返回它。实际上,我们可以通过在将对象分配给名称之前删除额外的空格来使用此方法来进一步简化新代码。

代码:
put"Hello, Ruby!"
打印"I'm "
名称= get..strip.
put"Ruby says, \"Hello, #{name}\""


笔记: 与Java一样,并且与许多其他语言一样,DOT用于访问Ruby中的方法。

如果....我只有一个大脑......

红宝石以与其他语言的方式使用If语句。

代码:
put"Hello, Ruby!"
打印"I'm "
名称= get..strip.

如果name ==.""
   puts "Ruby says, \"fine, ignore me!\""
elsif name =="Calvin" or name == "Linus" or name == "Sid"
   puts "Ruby says, \"Haaaaa haaaaa!\""
别的
   puts "Ruby says, \"Hello #{name}\""
结尾


现在,我们可以通过将Ruby的消息粘在变量中,然后稍后执行打印,从而简化这一点并删除冗余代码。

代码:
put"Hello, Ruby!"
打印"I'm "
名称= get..strip.

如果name ==.""
   statement = "fine, ignore me!"
elsif name =="Calvin" or name == "Linus" or name == "Sid"
   statement = "Haaaaa haaaaa!"
别的
   statement = "Hello #{name}"
结尾

put"Ruby says, \"#{statement}\""


我们仍然没有使用这种语言来充分发挥潜力,所有这些冗余“声明=”行看起来很糟糕。它们对我来说很糟糕,因为我知道Ruby的if ... elsif ... eLSIF ...结束构造可以返回如下代码中的值。

代码:
put"Hello, Ruby!"
打印"I'm "
名称= get..strip.

声明=如果name ==""
   "fine, ignore me!"
elsif name =="Calvin" or name == "Linus" or name == "Sid"
   "Haaaaa haaaaa!"
别的
   "Hello #{name}"
结尾

put"Ruby says, \"#{statement}\""


我们甚至没有需要“返回”,即使Ruby拥有它,我也可以使用它。

虽然它不是真正的控制结构,但它经常使用,我觉得我觉得有义务在这里提供关于普通表达的简要说明,因为它可以大大简化我们的测试,看看Ruby应该嘲笑你。

正则表达式是可以匹配哪个文本的模式。我们目的的一个简单的正则表达式如下:

代码:
/凯尔文| Linus | SID /


削减Ruby将作为一种刚刚发生的报价形式,以引用正则表达式。 |表示模式应匹配Calvin,Linus或SID。在这种情况下,如果它们发生在输入名称中的任何位置,则会匹配。当然,人们可能会争辩说,如果只有他们的中间名是Linus,那么再一次,如果他们在公开提到的话,他们会得到嘲笑。

笔记: 没有冒犯旨在任何人实际命名的Calvin,Linus或SID。

要匹配对字符串的螺旋表达式,我们使用=〜运算符,因此我们的代码现在成为以下内容。

代码:
put"Hello, Ruby!"
打印"I'm "
名称= get..strip.

声明=如果name ==""
   "fine, ignore me!"
elsif name =〜/ calvin | linus | sid /
   "Haaaaa haaaaa!"
别的
   "Hello #{name}"
结尾

put"Ruby says, \"#{statement}\""


现在我应该提到包括“然后”关键字,允许在代码中布局的大量灵活性。

代码:
put"Hello, Ruby!"
打印"I'm "
名称= get..strip.

声明=如果name =="" then "fine, ignore me!"elsif name =〜/ calvin | linus | sid / then"Haaaaa haaaaa!" else "Hello #{name}" end

put"Ruby says, \"#{statement}\""


以防万一

当然,如果我们知道Ruby的案例构造,最后的例子可能看起来更好。类似于其他语言“Switch”,Ruby的对应物更强大,因为它可以根据Integers以外的类型工作。

代码:
put"Hello, Ruby!"
打印"I'm "
名称= get..strip.

声明=case name
   when ""
      "fine, ignore me!"
   何时/凯尔文| Linus | SID /
      "Haaaaa haaaaa!"
   else
      "Hello #{name}"
结尾

put"Ruby says, \"#{statement}\""


但这包括许多额外的空格,使其清楚该构造方式如何工作。再次,“然后”可以压缩它全部。

代码:
put"Hello, Ruby!"
打印"I'm "
名称= get..strip.

声明=案例名称何时"" then "fine, ignore me!"什么时候/凯尔文| Linus | SID /然后"Haaaaa haaaaa!" else "Hello #{name}" end

put"Ruby says, \"#{statement}\""


即使是现在,通过所有这些,我已经忽略了Ruby的Postfix条件。是的,我们实际上可以坚持“如果”结束以获得快速单行。

在以下内容中,我们将确保Ruby在语句变量为空的奇怪事件中没有说出任何内容,不知所措。

代码:
put"Hello, Ruby!"
打印"I'm "
名称= get..strip.

声明=案例名称何时"" then "fine, ignore me!"什么时候/凯尔文| Linus | SID /然后"Haaaaa haaaaa!" else "Hello #{name}" end

put"Ruby says, \"#{statement}\"" if statement != ""


在这种情况下更清楚,虽然是关键字“除非”,我们可以使用任何地方“如果”(虽然没有ElsUnless)。

代码:
put"Hello, Ruby!"
打印"I'm "
名称= get..strip.

声明=案例名称何时"" then "fine, ignore me!"什么时候/凯尔文| Linus | SID /然后"Haaaaa haaaaa!" else "Hello #{name}" end

put"Ruby says, \"#{statement}\""除非声明==""


但==“”看起来很忙。如果Ruby的字符串有一种方法可以确定这些字符串是否为我们的方法,那么它不会伟大,以一种比我们目前使用的方式更为含义?

哦,他们这样做。

代码:
put"Hello, Ruby!"
打印"I'm "
名称= get..strip.

声明=案例名称何时"" then "fine, ignore me!"什么时候/凯尔文| Linus | SID /然后"Haaaaa haaaaa!" else "Hello #{name}" end

put"Ruby says, \"#{statement}\""除非陈述空白


空洞结束时的问号?方法是一个很好的视觉指示器,方法返回布尔(真或假)值。

那么,我们怎样才能让这更短,只是因为我们是1337黑客?

好吧,我在“Hello,Ruby!”中提到了教程#{}构造比我所示的示例更强大,它是。除了仅将变量插入字符串外,它还可以插入整个表达式。


代码:
put"Hello, Ruby!"
打印"I'm "
名称= get..strip.

put"Ruby says, \"#{case name when "" then "fine, ignore me!"什么时候/凯尔文| Linus | SID /然后"Haaaaa haaaaa!" else "Hello #{name}" end}\""除非陈述空白


这一切都很好,善良,但现在没有陈述变量在最后测试。

代码:
put"Hello, Ruby!"
打印"I'm "
名称= get..strip.

put"Ruby says, \"#{语句=案例名称何时"" then "fine, ignore me!"什么时候/凯尔文| Linus | SID /然后"Haaaaa haaaaa!" else "Hello #{name}" end}\""除非陈述空白


现在有!

最后一件事

警告: 疯狂的代码压实遵循。 眨眼

现在,让我们说我不需要在此之后的其他任何地方使用变量名。我为什么要创建它?

代码:
put"Hello, Ruby!"
打印"I'm "

put"Ruby says, \"#{statement = case get.strip何时"" then "fine, ignore me!"什么时候/凯尔文| Linus | SID /然后"Haaaaa haaaaa!" else "Hello #{name}" end}\""除非陈述空白


我们现在在一行代码中允许我们这样做的是,您不仅可以将单个表达式放入字符串,但您可以通过半冒号分隔许多。最后一个表达式的返回值是将插入到字符串中的内容。

应该指出的是,引号可以奇怪地在#{}内工作,所以我们必须奇怪地引用“我”在下面。

代码:
put"Ruby says, \"#{puts "Hello, Ruby!";打印'我';声明=案例get.strip何时"" then "fine, ignore me!"什么时候/凯尔文| Linus | SID /然后"Haaaaa haaaaa!" else "Hello #{name}" end}\""除非陈述空白


对于一个教程来说,这可能是扭曲的代码。
赞助
赞助
赞助
赞助
托尼




邮政发布: 孙军2004年6月7日下午7:59  帖子主题:(没有主题)

在任何限制的任何编程竞赛中都不应允许Ruby 线路数量 笑
最新来自compsci.ca/blog: Tony's 编程博客。 DWite - A. 编程竞赛.
WTD.




邮政发布: 孙军2004年6月27日10:03 PM  帖子主题:(没有主题)

谷歌为“Perl Golf”。那将真正吹脑。
Rizzix.




邮政发布: 2004年6月28日星期一10:16 AM  帖子主题:(没有主题)

yea perl rox .. perl是xtreme!呵呵
肖像




邮政发布: THU 05,2009 9:18 PM  帖子主题:RE:[Ruby-Tut]决策,决定......

抱歉碰到一个旧话题,但我开始看红宝石,我想我在这个教程中发现了一个错误。不应该这代码:
红宝石:
put “Ruby说, #{PLIS."你好,红宝石!“;打印'我\M';声明=案例get.strip何时“"然后"好吧,不理我!"什么时候/凯尔文| Linus | SID /然后"Haaaaa Haaaaa!"别的"你好 #{名称}" end}\""除非陈述空白

是:
红宝石:
put “Ruby说, #{PLIS."你好,红宝石!“;打印'我\M';语句=案例名称= gets.strip何时“"然后"好吧,不理我!"什么时候/凯尔文| Linus | SID /然后"Haaaaa Haaaaa!"别的"你好 #{名称}" end}\""除非陈述空白

为语句分配“hello#{name}”无法正常工作,因为尚未被声明,对吧?不应该“代码gets.strip”代码名称= get.strip何时“?我刚刚开始使用Ruby,所以这可能不是正确的,但只要我尝试在教程中运行代码,它就会退出而不在此行后执行任何代码。当我更改“案例gets.strip时,它会运行正确的运行”案例名称= get.strip“。
WTD.




邮政发布: FRI FEB 06,2009 1:10 AM  帖子主题:RE:[Ruby-Tut]决策,决定......

我认为你是对我有问题的代码。谢谢你的警惕。
虫子




邮政发布: Frib 06,2009 12:32 PM  帖子主题:RE:[Ruby-Tut]决策,决定......

那么,半冒号将表示一条新线吗?允许您在单行上放置多个语句?当你把所有东西放在新的线路上(我理解)时,没有必要的半冒号。


ot,我注意到你不再在IRC上,WTD。宝宝占据了这么大的时间吗?你忘记了我吗? (笑话,只是观察你的缺席.....而不是我不想念你或任何东西......)
WTD.




邮政发布: FRI FEB 06,2009 1:28 PM  帖子主题:RE:[Ruby-Tut]决策,决定......

宝贝,扩大工作责任。
赞助
赞助
赞助
赞助
从上一个显示帖子:   
   指数 -> 编程,Ruby. -> 红宝石教程
查看上一个主题 告诉一个朋友可打印的版本下载主题利率主题订阅本主题私人信息刷新页面 查看下一个主题

11  [ 8 Posts ]
跳到:   


Style:  
搜索: