yield关键字我是这样理解,用它来占一个位置,先标记下这个地方将来要写代码的,等到调用的时候,再来编写具体的代码。有点像函数指针,或者C#里的委托,但其实并不太一样。
写测试接口的时候,每次的assert返回值不一样,但函数体大部分是相同的,只有参数不同。正好最近看到了yield,就熟悉一下用法,可以把assert这部分code写在yield 的位置。
例子主要就是test_nodes这个函数的定义 和 它的调用。
Code:
1 def generate_nodes(n=3) 2 return n 3 end 4 5 def add_nodes(url,node) 6 if node % 2 == 0 7 return "message", 200 8 else 9 return "error", 500 10 end 11 end 12 13 def test_nodes(nodes) 14 nodes.each do |node| 15 2.times do 16 #somecode 17 restr, rcode = add_nodes("url",node) 18 yield restr, rcode, node 19 end 20 end 21 end 22 23 nodes_list = [generate_nodes, generate_nodes(4),generate_nodes(5),generate_nodes(6)] 24 25 test_nodes(nodes_list) do |restr, rcode, node| 26 if restr == "message" && rcode == 200 then #assert return value 27 puts "success" 28 else 29 puts "failed: node is #{node}" 30 end 31 end
时间: 2024-10-26 16:03:48