ruby开发答疑.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ruby开发答疑

本问答的目标读者是不了解Ruby语言、但有别的编程语言经验的人。Ruby语言的代码可读性是很强的。本问答只把一些语法特点、以及别的语言中可能没有或不同的东西展现出来,目的在于让有别的编程语言经验的人能快速读懂Ruby代码。注意本问答讲的是Ruby语言本身(基于版本1.9),而不是Ruby on Rails,后者是Ruby的一种DSL,语言面貌上和Ruby有一定差异。Q:Ruby最有特点的语法形式是什么?或许是方法后接代码块的大量使用,以下面这行代码为例: file.each_line(x) { |line| print line } 表示在file对象上调用each_line方法(以x为行的分隔符),该方法的功能是依次得到每一行,传递给后面的代码块,代码块把传来的行赋值给line变量,然后在代码块里对line进行处理,处理完毕则从代码块返回each_line方法,再由它得到下一行,再一次传递给代码块。——像each_line这样的方法,Ruby中称之为迭代器方法(iterator)。又比如这个例子: open(test.txt) { |f| line_array = f.readlines } 用open方法打开test.txt文件,生成了一个File类的实例对象,并把这个对象传递给后面的代码块,赋值给变量f,然后代码块里对f进行操作,操作完毕后返回open方法,open方法再把f关闭,所以这一行代码相当于如下三行: f = open(test.txt) line_array = f.readlines f.close Ruby风格写法的好处:一行完成,逻辑紧凑;自动关闭文件,防止忘了f.close;当前scope少创建一个变量名f,代码块关闭后,f就消失了一个Ruby风格的完整命令就是由对象、方法(包含参数)、代码块(包含参数)构成的。有的方法可以不接代码块。Q:我看到有些代码和上面提到的写法不太像,是怎么回事?有些DSL看起来和Ruby语言本身不大像,但其实语法格局是一样的,只是通过一些设定伪装成别的风格。大致有四点导致这种情况:1、隐性地调用方法,让方法看起来像函数或关键词; Ruby中没有函数,全都是方法。方法就得在某个对象上调用,但是这个对象可以隐藏方法不在某个对象上显式调用,那它就一定是在self所指的对象上调用如open(file)实际是self.open(file),不过open是私有方法,不能显式写出对象2、省略了括起参数的括号;如open(test.txt,w)可以写成open test.txt, w 3、代码块的{...}改成do...end; open test.txt do |line| end 就相当于open(test.txt) {|line| } 这是很常见的,{...}和do...end只在优先级上有一些不同,一般都可互换通常的风格是:代码块里的代码若只有一行,则用{},若有多行,则用do...end 这只是风格管理,实际上即使是多行代码,你也可以用{}括起来4、省略作为方法参数的哈希(散列)字面量的花括号。很多方法喜欢拿一个哈希做参数,如果哈希是方法调用的最后一个参数,则花括号可省略 task :name = :test 相当于 task({:name = :test}) 如下一段代码:HTMLForm.generate(STDOUT) do comment This is a simple HTML form form :name = registration, :action = /register.cgi do content Name: input :name = name content Address: textarea :name = address, :rows=6, :cols=40 do Please enter your mailing address here end end end 如果写“全”来,就相当于这样:HTMLForm.generate(STDOUT) { ment(This is a simple HTML form) self.form({:name = registration, :action = /register.cgi}) { self.content(Name:) self.input({:name = name}) self.content(Address:) self.textarea({:name = address, :rows=6, :cols=40}) {

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档