V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
johnnyb
V2EX  ›  Ruby

关于 block 的困惑

  •  
  •   johnnyb · 2014-05-05 14:28:48 +08:00 · 5231 次点击
    这是一个创建于 3857 天前的主题,其中的信息可能已经有所发展或是发生改变。
    fe38b5a3c5f28a76f1
    最后一行不理解, &lambda {} 不是转成 block 了吗?
    13 条回复    2014-05-06 10:27:24 +08:00
    johnnyb
        1
    johnnyb  
    OP
       2014-05-05 14:36:09 +08:00
    johnnyb
        2
    johnnyb  
    OP
       2014-05-05 14:37:20 +08:00
    johnnyb
        3
    johnnyb  
    OP
       2014-05-05 14:38:14 +08:00
    坑爹,我已经忘了怎么贴 gist 了
    dorentus
        4
    dorentus  
       2014-05-05 15:09:58 +08:00
    dorentus
        5
    dorentus  
       2014-05-05 15:20:00 +08:00   ❤️ 1
    block 的话,要不就这么直接用 block:
    func { ... } 或者 func do ... end
    要不就是这样用一个 proc:
    func(&proc)

    最后的那个 foo() &lambda {},其实我也不是很明白,但是可以确定的是传入 foo 的参数是 0 个,后面那个 proc 没起啥作用……
    KDr2
        6
    KDr2  
       2014-05-05 16:19:39 +08:00   ❤️ 2
    难道不是 (foo()) & (lambda {})

    :D
    dorentus
        7
    dorentus  
       2014-05-05 16:24:54 +08:00
    @KDr2 真的欸!
    难怪返回值是 false...
    johnnyb
        8
    johnnyb  
    OP
       2014-05-05 18:47:24 +08:00
    @KDr2 运算符优先级的关系?foo &lambda {} 其实是 foo(&lambda {}) ?
    KDr2
        9
    KDr2  
       2014-05-05 22:03:39 +08:00   ❤️ 1
    @johnnyb
    嗯,就是看 Parser 怎么 parse 的吧,

    对 foo() &lambda {} 来说 foo() 后面没有 "{" 和 "do"已经是个完整的 function-call, lambda {} 也是合法 expression,两者 & 起来也是合法的 expression。
    对 foo &lambda {} 来说 foo 可能不是一个完整的function-call, 还要继续看后面有没有参数,然后发现&开头的block
    orzfly
        10
    orzfly  
       2014-05-05 22:45:56 +08:00
    orzfly
        11
    orzfly  
       2014-05-05 22:47:47 +08:00   ❤️ 2
    https://gist.github.com/18bad83973614abb03f3

    你看,前者是 foo(lambda(&{})),后者是 foo().&(lambda{})
    johnnyb
        12
    johnnyb  
    OP
       2014-05-06 00:02:17 +08:00
    @orzfly [赞]
    tangzx
        13
    tangzx  
       2014-05-06 10:27:24 +08:00 via iPhone
    & 加在 block 名前,便只能写进括号里(和实参一样)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1253 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:08 · PVG 02:08 · LAX 10:08 · JFK 13:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.