从Puppet模块openstack / nova了解Ruby代码

时间:2017-04-11 18:35:28

标签: ruby

我不太了解Ruby,并希望有人能帮助我理解这些代码所做的一些事情。

newproperty(:value, :array_matching => :all) do
    desc 'The value of the setting to be defined.'
    def insync?(is)
      return true if @should.empty?
      return false unless is.is_a? Array
      return false unless is.length == @should.length
      return (
        is & @should == is or
        is & @should.map(&:to_s) == is
      )
end

我根本不确定这条线......

newproperty(:value, :array_matching => :all) do

......正在做。定义一个接受两个参数的函数: value array_matching ?这是一个循环?我不明白:array_matching => :所有都是关于。

接下来是......

    desc 'The value of the setting to be defined.'

......这是某种内置文档吗?接下来就是这个:

    def insync?(is)
      return true if @should.empty?
      return false unless is.is_a? Array
      return false unless is.length == @should.length
      return (
        is & @should == is or
        is & @should.map(&:to_s) == is
      )

我猜这个函数叫做" insync"正在定义。不确定'是什么?'手段。另外我猜@should是在父范围内声明的一些全局变量。

由于

1 个答案:

答案 0 :(得分:1)

我会尝试做出假设,并尽可能从所提供的信息中回答这个问题。

  1. 您可能有一个函数newproperty(x, y)< - 在相关模型或帮助器中的某处接受2个参数。它从分配:value:array_matching => :all的某些用户互动中获取这些输入是基于:value

  2. desc不是本机Ruby函数。它必须在某处定义。例如,此代码将运行:

  3. def desc(x) puts x end

    desc 'The value of the setting to be defined.'

    它有点不同寻常,但它会起作用。

    1. ?在def insync?(is)中是函数名称的一部分。 Ruby应该是一种非常类似英语的语言,并且由于许多函数都评估为真或假,所以当你将函数本身作为一个问题时,它有时更容易阅读。