只显示主题贴
我之所以在这里“咬文嚼字”,是为了追求对语言的精确理解。
对于象ruby这种特性丰富的语言,没有象JavaScript那样有一个定义严谨的规范来作参考,只能靠“咬文嚼字”了。
说“离开ror,ruby啥都不是“这个严重不同意. 单独来看ruby本身就是一门非常优秀的脚本语言,就“陷阱”而言并不比C++多,语言的表达能力并不在Perl之下而可读性非常之高,唯一缺憾是速度较慢,但对于脚本语言来说这个问题并不显著。
我开始用ruby的时候,根本就不知道什么是rails.
- 进入论坛 Ruby 版
lllyq 写道rubynroll 写道lllyq 写道你可以试试看新开irb,执行
if a then a else a = 2 end
这个效果跟新开irb,执行
a || a = 2 效果是一样的,ruby 版本是1.8.6
效果不一样, 至少在版本是1.8.6. 1.8.7上是不一样的, 后者会raise undefined error.
根据你的回复我估计你还是没去试,显然,无论在1.8.6, 1.8.7,后者都会raise undefined error. 前者你试过了么?试过后你就知道为什么我会回第一个帖了\
我说的更清楚一点就是你测试下来两者行为不一样,那是因为你的测试方 ...
- 进入论坛 Ruby 版
lllyq 写道你可以试试看新开irb,执行
if a then a else a = 2 end
这个效果跟新开irb,执行
a || a = 2 效果是一样的,ruby 版本是1.8.6
效果不一样, 至少在版本是1.8.6. 1.8.7上是不一样的, 后者会raise undefined error.
lllyq 写道
非要用一个准确的展开式下面这个应该可以
if defined?(a) then (a || a = b) else a = nil end
这就是我所想要的讨论的,一个准确的展开式.
但是这个式子还是有问题, 应该是这样才对:
if defined?(a) the ...
- 进入论坛 Ruby 版
lllyq 写道讨论研究是相互的,你是不是太自信了,事实上你的每一行代码我从一开始都试过了才回贴的,希望看到这里的朋友也试试看,LZ不愿意尝试也没问题,你们自己试试看是怎样,否则可能会被这个标题误导
另外关于define的问题还有另一个解释,一般我们都在方法体用,就不存在define的问题,因为如果未定义会自动使用local变量
老实说不是我不愿意尝试,而是我不知道如何根据你的说法来尝试.
其实对于这个问题我自己也是一肚子疑惑, 所以才会发文, 看看大家是否还有更好的解释? Quake Wang就纠正了我的结论.
但从你的回复中,我实在不知道如何去根据你的"说法"转换成展开式, 恕我 ...
- 进入论坛 Ruby 版
lllyq 写道这个h[:x]行为有什么特别么?跟预期的行为一致啊
h[:x] ||= 2 并没有对h[:x]赋值,相当于h[:x] || h[:x] = 2,而h[:x] = nil是有一个赋值动作
我举的那个例子就是为了反驳
caryl 写道
同意楼上,感觉应该相当于
a = nil
a || a = b
caryl说的"楼上"就是
lllyq 写道a || a = b 就是 a || a = b,本来就没考虑defined?的问题,跟 if a then a else a = b end 一样的,如果你执行下来不一样那估计是你连续执行的问题,前一句相当于做了define
...
- 进入论坛 Ruby 版
lllyq写的我没看明白....拜托用点例子好不好?
caryl 写道同意楼上,感觉应该相当于
a = nil
a || a = b
你在irb里面试一下就知道了,两者并不等价:
irb(main):014:0> h = Hash.new(1)
=> {}
irb(main):015:0> h[:x] ||= 2
=> 1
irb(main):016:0> h
=> {}
irb(main):017:0> h[:x] = nil
=> nil
irb(main):018:0> h[:x] || h[:x] = 2
=> 2
irb(main):019:0> h
...
- 进入论坛 Ruby 版
前一段时间,我在这里http://rubynroll.javaeye.com/blog/192547展示了一个空格带来的'陷阱', 今天又见到另一个'陷阱'(http://dablog.rubypal.com/2008/3/25/a-short-circuit-edge-case by David).
之所以为陷阱加引号, 是因为大部分情况下我们都没有机会掉进去 :)
大多数Ruby教科书在解释 "a ||= b" 这个复合操作时,都说她等效于: "a = a || b", 实际上真的如此么?
让我们在irb里面来看看:
h = Hash.new(1) # 生成一个新的Hash,缺省 ...
- 进入论坛 Ruby 版
直接用git吧如果不幸被PMO VSS了,也不是没法活了,你可以VSS+GIT, 照样可以多人同时修改同一个文件,而且还可以分布式!详情请见"SVN+GIT=鱼与熊掌兼得":http://rubynroll.javaeye.com/admin/blogs/203133
- 进入论坛 软件开发和项目管理 版
动态规划可以解决T1给出的公式么?这个可是挑战极限的好例子啊,呵呵~f(0,n)=n+1, f(m,0)=f(m-1,1), f(m,n)=f(m-1,f(m,n-1))
- 进入论坛 综合技术 版
- 浏览: 4138 次
- 性别:

- 来自: Wgt

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
Ruby'陷阱'之: '||=' 的 ...
我之所以在这里“咬文嚼字”,是为了追求对语言的精确理解。 对于象ruby这种特 ...
-- by rubynroll -
Ruby'陷阱'之: '||=' 的 ...
geszJava 写道回复不见了? ruby按我说就是不断句的之乎者也,陷阱多多 ...
-- by seemoon -
Ruby'陷阱'之: '||=' 的 ...
回复不见了? ruby按我说就是不断句的之乎者也,陷阱多多,没多少前途。最终还是 ...
-- by geszJava -
SVN+GIT=鱼与熊掌兼得
干吗要那么麻烦呢,何不直接用 git-svn
-- by Lynx -
Ruby'陷阱'之: '||=' 的 ...
引用 但是David后来认为"a || a = b"应该更恰当些. 楼主是咬 ...
-- by seemoon






评论排行榜