# 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?
任何人都可以指出任何有关此问题的好文章,或者你可以简单地向我解释一下这一点
这yield row if block_given?
意味着可以传递给#queryNewsTable
方法(!)的块使用yield运算符进行求值,换句话说,如果将块传递给函数#queryNewsTable
:
queryNewsTable do
#some code
end
Run Code Online (Sandbox Code Playgroud)
对于result
变量中的每一行,您将获得对代码的调用.
注意:对于您的情况,优化代码(如果不使用db 触发器)将更好:
# 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)
问问自己如何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
,它只是采用块的方法调用块的方式,并根据需要向其传递参数。