这段ruby代码什么意思

最近在研究elk,需要嵌入ruby代码,还望有懂ruby的帮下忙,解释一下,谢谢了!

就是解释以下下面这两种 每一部分 代表什么就好了。

    //第一种
    xx "xxx" do
    
    end
    //第二种
    xx("xxx") do |xx|
    
    end

原代码如下

test "drop percentage 100% " do
       
        parameters do
                {"percentage"=>1}
        end

        in_event {{"message"=>"bonjour bonjour","date"=>"2018-2-2"}}

      
        expect("drops the event") do |events|
                puts "-------->expect"
                events.size == 0
        end
end
阅读 2.1k
1 个回答

这段代码是一个单元测试,解释大概如下:

parameters do
  {"percentage"=>1}
end

这段代码的意思是,parameters是一个不带参数的函数,这个函数可以跟一个代码块,也就是do...end这部分,嵌入到函数里yield部分执行操作,比如这里就将一个赋值操作给了parameters函数。

这个yield怎么用呢?请看下面这个例子:

# 定义函数test
def test
  puts '1'
  yield # 这里提供给代码块执行
  puts '3'
end
test do
  puts '2' #代码块具体执行内容
end

然后输出1、2、3

同理,

expect("drops the event") do |events|
  puts "-------->expect"
  events.size == 0
end

这里是一个带参数的函数,后面接了一个代码块,函数是expect目的是为了做一个测试的断言,参数“drops the event”是这个断言的描述——希望抛掉所有的events,然后函数可以在yield的时候给一个参数,让代码块使用yield(events),比如这里将events拿出来,代码块来判定这个events.size为0。

这个expect函数大概是这样定义的:

def expect(describe)
  events = [] # 做一个操作将events清空
  result = yield(events) # 将events作为参数,拿给外面的代码块
  if result == true
    puts '断言成功'
  else
    puts '断言失败'
  end
end

你看具体使用的时候,代码块判定了events.size == 0,然后这个结果true在expect函数里赋值给了result,expect函数继续往下执行。

另外,代码块不止是do...end和do |unit| ... end,这里了in_event后面的{...}也是代码块,代码块的内容是{"message"=>"bonjour bonjour","date"=>"2018-2-2"}这个哈希,另外还有种代码块的使用是{|unit|...}。也就是,你可以把左大括号看成do,把右大括号看成end。

希望能帮助到你。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏