• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

ruby句法问题

发布: 2007-7-04 20:03 | 作者: admin | 来源:  网友评论 | 查看: 18次 | 进入软件测试论坛讨论

领测软件测试网 4.1 像:exit这种带:的标识符表示什么?

它叫做符号对象,它与标识符之间是1对1的关系。您也可以使用"exit".intern来得到它。在catch, throw, autoload等方法中,既可以使用字符串参数,又可以使用符号参数。

4.2 如何取得与符号同名的变量的值?

在symbol的作用域内,使用eval((:symbol).id2name)来取值。

a = 'This is the content of "a"' b = eval(:a.id2name) a.id == b.id 4.3 loop是控制结构吗?

不,它是方法。该块会导入新的局部变量的作用域。

4.4 a +b报错,这是怎么回事儿?

它会被解释成a(+b)。+的两侧要么都有空格,要么就都没有。

4.5 s = "x"; puts s *10 报错,这是怎么回事儿?

puts s *10会被解释成s(*10)的方法调用,所以要么s*10这样,要么s * 10这样。

4.6 为什么p {}没有任何显示呢?

{}会被解释成块,而并非哈希表的构造函数。所以您需要使用p({})或者p Hash.new来解决这个问题。

4.7 明明有pos=()这样的setter方法,可为什么pos=1时却没有任何反应呢?

请看下例。

class C attr_reader :pos def pos=(n) @pos = n * 3 end def set pos = 1 #A行 end end a = C.new a.set p a.pos #=> nil (预期值是 3)

本来指望最后一行能输出 3,但却是个 nil ,这是因为Ruby把A行的pos解释成局部变量了。若想调用pos=()的话,请这样self.pos = 1调用。

4.8 '\1'和'\\1'有什么不同?

没有不同,二者完全一样。在单引号中,只有\'、\\和行尾的\(取消换行)会得到特殊的解释,其他字符不变。

4.9 在p true or true and false中会显示true,但在a=true if true or true and false中却不会把true赋值给a。

第1个表达式会被解释成(p true) or true and false,其中的and/or是构成语句的要素,而并不是用来连接p的参数的操作符。

第2个表达是则会被解释成a=true if (true or true and false)。因为if的优先度低于and/or,且or与and的优先度相同,所以就会从左到右地完成解析。

4.10 为什么p(nil || "")什么事儿都没有,可p(nil or "")却会报错呢?

虽然||可以连接参数,但or就只能连接句子,所以如此。关于这点区别,您试一试下面的例子就明白了。

p nil || "" p nil or ""

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网