代码之家  ›  专栏  ›  技术社区  ›  Cameron Booth

在单行上放置块的语法

  •  23
  • Cameron Booth  · 技术社区  · 17 年前

    我有一个Ruby方法,如下所示:

    def something(variable, &block)
      ....
    end
    

    我想这样称呼它:

    something 'hello' { do_it }
    

    something 'hello' do
      do_it
    end
    

    但我有点错过了它在一条线上的美好外观。

    我可以理解为什么会发生这种情况,因为它看起来像是一个散列作为第二个变量传递,但变量之间没有逗号……但我假设一定有一种方法来处理我所缺少的问题。有?

    3 回复  |  直到 17 年前
        1
  •  46
  •   Rômulo Ceccon    17 年前

    您需要将您的论点插入括号:

    something('hello') { do_it }
    

    这应该行得通。

        2
  •  2
  •   seanbehan    17 年前

    如果您希望“def something”接受一个块,则需要向该块生成数据。例如:

    #to uppercase string
    def something(my_input)
     yield my_input.upcase
    end
    
    # => "HELLO WORLD"
    something("hello world") { |i| puts i}
    
        3
  •  0
  •   Ryan Bigg Andrés Bonilla    17 年前

    呃,那么:

    >> def something(arg1 , &block)
    >>   yield block
    >> end
    => nil
    >> def do_it
    >>   puts "Doing it!"
    >> end
    => nil
    >> something('hello') { do_it }
    "Doing it!"
    => nil
    
    推荐文章