Ruby"如果block_given会产生行?"

Buf*_*lls 12 ruby

  # Get our data back
  def queryNewsTable
    @conn.exec( "SELECT * FROM newslib" ) do |result|
      result.each do |row|
        yield row if block_given?
      end
    end
  end
Run Code Online (Sandbox Code Playgroud)

对于这段代码.我不太明白 yield row if block_given?

任何人都可以指出任何有关此问题的好文章,或者你可以简单地向我解释一下这一点

Мал*_*евъ 7

yield row if block_given?意味着可以传递给#queryNewsTable方法(!)的块使用运算符进行求值,换句话说,如果将块传递给函数#queryNewsTable:

queryNewsTable do 
   #some code
end
Run Code Online (Sandbox Code Playgroud)

对于result变量中的每一行,您将获得对代码的调用.

注意:对于您的情况,优化代码(如果不使用)将更好:

# Get our data back
def queryNewsTable
  @conn.exec( "SELECT * FROM newslib" ) do |result|
    result.each do |row|
      yield row
    end
  end if block_given?
end   
Run Code Online (Sandbox Code Playgroud)


mat*_*att 5

问问自己如何Hash.new运作:

http://www.ruby-doc.org/core-2.1.0/Hash.html#method-c-new

它可以不带参数、单个参数或块。如果没有参数,则获取不存在的键的值将返回 nil。如果存在一个块,则获取不存在的键的值会给出该块所说的任何内容。显然,它的实现需要一种方法来询问“是否存在阻塞?” 以便它知道要使用哪种行为。就是这样block_given?

http://www.ruby-doc.org/core-2.1.0/Kernel.html#method-i-block_given-3F

至于yield,它只是采用块的方法调用的方式,并根据需要向其传递参数。