• #4 楼 @Juanito

    见笑了~~ 我心里知道,你比我牛多了。XD~

  • 最近一直在看 Web 开发,不过还真没看 PHP, 主要是觉得实在是没必要,而且为了使用 rails 而学习 php, 觉得有点得不偿失!

    最近主要看的书包括

    • Head First Rails.
    • Head First HTML & CSS
    • Head First SQL
    • Head First Ajax
    • Head First HTML5, 不过没看完。有空再看完。
    • JavaScript 语言精粹,这本书薄薄的 100 多页,不过绝对是 JS 的经典,这本书只讲 JS 的精华,并且指出了很多 Js 编程中容易踏入的误区,不过要提及的是,这本书讲的是纯粹的 JavaScript, 貌似不太适合初学者,对了,本书作者同时也是大名鼎鼎的 JSON 的作者。

    事实上,没看上面那些书之前,Agile3 以及 4 的购物车示例我已经完整的实践了一遍,但是因为很多基本概念糊涂,总是看起来不爽,总觉得别扭,现在再看 agile, 舒服多了。

    我说学 Python 并不是为了真学 Python, 最近也在看`Python 核心编程', 只是我觉得对比 Ruby 来学习 Python, 例如将书本中的 Python 代码全部用 Ruby 的实现一遍,反而更可以加深对 Ruby 的印象。

  • #33 楼 @jjym

    广义上来说,你可以说返回一个{}就形成一个闭包。就如同@fsword 说的,心里分清楚就行了。

    翻了半天,还是没找到那片 matz 的采访实录,不过我印象挺深,没错的。

  • #15 楼 @fsword

    就快了,多着两个月,至少本人 Web 开发以及 Rails 比较靠谱之后,就开始行动,老婆很支持的,唯一的问题就是自己。咱社区广州的好少,脸熟的我一个没见过,都找不到个聚一聚的机会。

    我如果去上海或杭州那边,找工作方面,你能帮我推荐一下吗?

  • #14 楼 @lgn21st

    哇,老兄也是夜猫子哦~ 你太谦虚了。不过,我真觉得如果喜欢 Ruby, 其他两个应该不难,尤其是 JS, 我怎么感觉就是 C 语法的 Ruby 子集。可能是现在还只是接触 Js 皮毛的缘故吧。不过,相比较其他程序员而言,如果你懂 Ruby, 剩下两个学习压力小得多,或者说,不学学,不看看,真的挺亏的!

  • #31 楼 @jjym

    好吧,我承认,连我自己现在对于闭包的准确定义也说不清是清楚还是糊涂了。

    准确的来讲,上面的两个示例都没有闭包,你只不过调用了两个方法而已,方法都有自己的局部变量,这和普通方法调用又有什么区别?

    def foo
      x = "你好"        # => 你的代码中x的含义和这里又有什么区别?
      puts x
    end
    
    foo
    
    

    关键是通过方法返回一个 Proc 对象,并且为这个 Proc 对象绑定一个上下文。

    def foo(str)
      lambda {puts str}
    end
    
    foo("你好")        # => 通过这一步才形成一个闭包. 方法调用结束, str = "你好" 这个binding仍旧存在.
    
    foo.call
    
    

    至于上那段英文,我是从一个老外的帖子里摘取的。说实话,我也没太明白 return 和是否闭包有什么区别,不过如果你希望像方法那样使用一个闭包 (期望得到所需的返回值), 很显然,用 Proc.new 是有问题的。也就是说,站在调用角度考虑,闭包不应该是代码块 (yield) 的方式,而应该是方法 (call) 的方式。有关这部分,我觉得没必要细分了,就像 Matz 接受采访时说的那样,在 Ruby 中,闭包就是 lambda. OK!

  • #4 楼 @muzuiget

    应该不是的。

    以上情况只是发生在使用 Chrome 浏览器 SwitchySharp 插件通过 Goagent 访问https://twitter.com/???类型网站才会出现。

  • #3 楼 @blogbin

    能说具体点是什么密码么?我尝试了好几个密码,都提示证书无效或损坏。

  • #7 楼 @quakewang

    谢谢,这正是我要的。刚刚还特意查了下,早就忘记还有这个用法了。

    貌似多了一个!, 我发现 command2 !:* 也是可以的。

  • #6 楼 @lululau

    这个方案我也知道,事实上 Alt-f 和 Ctrl-h 可以省略为 Alt-d, 我只是喜欢多一点解决办法。

  • 汗,看到类似帖子,就心里痒痒。也许我该考虑换个地方...

  • #4 楼 @suupic

    C-r 我知道。我经常在用啊。那是在历史记录中进行 isearch 搜索。

  • @fsword A Proc.new, then, is not quite truly closed: it depends in the creating context still existing, because the "return" is tied to that context.

    Not so for lambda.

    甚至因为 return 的定义不同,Proc.new 都不算是真正的闭包。只有 lambda 才是闭包。

  • #25 楼 @fsword

    我刚才一直在想,可能我自己对闭包理解也有些问题,我感觉把闭包的概念和一个闭包对象的传递,貌似混淆到一起去了。不过,我倒是觉得 Ruby 中的闭包 (类似于 ECMAScript 中的闭包), 和 Java 中的闭包,分开来理解,其实是一个好主意?

  • 形成一个闭包的唯一办法就是:返回一个 Proc 对象,然后通过 block 设定一个上下文 binding, 并通过 call 延迟调用。我觉得这个帖子,楼主的标题绝对是有问题的。或者说,这帖子根本不是在讨论闭包...

  • #22 楼 @aNdReW_Qx

    那么按你的说法,所有 block 都是闭包,下面的语句,也算创建了一个闭包了?

    def a(&block)
    s = "hello, world!"
    yield s
    end
    
    a {|x| puts x}    # => 这个一个方法调用差不多,  和闭包八杆子打不找嘛.
    
    
    
    
    
    

    我怎么感觉咱们理解的闭包的范围好像不一致,你们所形容的闭包范围是不是太广了点?通过 yield 就算形成一个闭包,你也没办法在多个调用之间传递,既然讨论闭包,怎么着也得用 call 来讨论才靠谱。我记得咱社区的@skandhas曾经说过,闭包的一大特性是被闭包的语句达到延后执行的效果,没有这个效果又怎么能叫做闭包?

  • 虽然不想水,不过,还是顶起来吧。O_o

  • 别沉下去,谁知道呀~

  • RubyMotion 测试小感 at 2012年05月07日

    真牛~ 佩服楼主的吃螃蟹精神和研究精神!

  • #4 楼 @fsword

    楼主想要的应该是一个命令行下的解决方案,我给个完整的:

    ruby -i -e 'puts ARGF.readlines.uniq!' file.txt
    
    
  • #16 楼 @fsword #17 楼 @donnior

    嘿~ 看了半天我都晕了,怎么我老觉得我理解的闭包和大家说的不是一回事儿呀!在我看来,Ruby 之中的普通 yield, 因为他的实现方式 (并行赋值,并且更像代码块), 所以给我的印象是,和闭包八杆子打不找嘛。我感觉你根本不可能通过 yield 来创建一个闭包。而 lambda 因为更像方法 (匿名方法), 闭包都是通过返回一个 lambda {... }实现的。

    也许我理解不对,通过 yield 也能创建闭包?也可能因为以前看过 Matz 的一篇采访实录缘故吧。我印象很深刻,当时 Matz 说,在实现 Ruby 时,闭包这个概念来自于 Lisp 当中的 lambda 运算。

    不管怎么说,拿 yield 的例子来谈闭包,是不是不妥?会误导新人?

  • Ruby China T 恤 宝雷杭团队 at 2012年05月07日

    怎么有的正着穿,有的反着穿呀~ 哈!

  • 郁闷的事情. at 2012年05月06日

    #17 楼 @Juanito

    我理解了,只要有点名气的网站,Google 都会索引,就类似于 Google Cached 一些网站内容一样,然后你就可以随便搜啦。

  • 郁闷的事情. at 2012年05月06日

    #13 楼 @Juanito

    明白了,再问个比较弱弱的问题,site:ruby-china.org , 后面的 ruby-china.org, 可以替换为任意站点吗?我觉得是不是应该给 Google 提交个什么才可以全站搜索吧?

  • 郁闷的事情. at 2012年05月06日

    #11 楼 @Juanito

    请教一下,你搜索时,中间那个~"@"啥意思?

  • 郁闷的事情. at 2012年05月06日

    #9 楼 @jokry

    嗨~ 其实我是要自己回复过的所有帖子...

  • 通过 yield 可以实现闭包吗?楼主对于闭包的概念可能有点糊涂,我觉得别人再给你解释也解释不清楚。建议还是应该先看看书,用到了自然就了解了。

    #7 楼 @cantin ; 很好理解,就是一个本地 (独立) 变量,就像方法的形参一样。上面的代码,puts x 时,x 是未初始化状态,不受 x = 2 影响,所以输出为 nil.

  • 郁闷的事情. at 2012年05月06日

    #6 楼 @Juanito

    谢谢啦。你给的链接,我找到了。感觉自己回复还真不少... 兄弟,你真牛~ , 搜索框内是使用的 Google 提供的语法吗?我都搜索关键字是这样的。

    "zw963" ~"@" site:ruby-china.org

    中间那个~"@"啥意思?还有就是你那个短域名http://goo.gl/NHd5q怎么搞出来的?

    有点郁闷,难道自己回复的帖子,每次还得这样找,我感觉一般论坛,见很多人都动不动回复个帖子mark一下, 我是认真回复帖子的。可是连自己的回复都找不到...

  • 郁闷的事情. at 2012年05月06日

    @lgn21st

    嗨,吕国宁,你能告诉我怎么获取我之前回复过的帖子吗?NND, 昨晚上找了好久没找见,关键那个版块我都不记得。

  • 郁闷的事情. at 2012年05月06日

    #3 楼 @hlcfan @

    晕死了,到底什么意思啊?我怎么只能看到最近的 10 篇回复的帖子?往那里翻后十篇?