2017-06-14 73 views

回答

1

不完全一样,但差不多。请注意,只要您使用类别表达式 (expression::),上下文限制就会应用到下一个表达式或 ,直到下一个承诺类型,因此它可能适用于多次承诺 其中ifvarclass仅适用于一个承诺时间。另外从3.7.0开始, 是一个if aliasifvarclass,这是更好的类型恕我直言。

对于简单的基于类的约束是的,它们可以互换使用。

bundle agent main 
{ 
    vars: 
    "classes" slist => { "linux", "windows" }; 

    reports: 

    "I am a Linux box" 
     ifvarclass => "linux"; 

    linux:: 
     "I am still a Linux box"; 
} 

R: I am a Linux box 
R: I am still a Linux box 

您还可以互换使用简单表达式。

bundle agent main 
{ 
    vars: 
    "classes" slist => { "linux", "windows" }; 

    reports: 

    "I am a Linux box" 
     ifvarclass => "linux.64_bit"; 

    linux.64_bit:: 
     "I am still a Linux box"; 
} 

R: I am a Linux box 
R: I am still a Linux box 

直到3.7.0你不能使用传统的上下文类表达式变量 ($(my_variable)::)和ifvarclass是为能够使用 公理化变量作为约束有用。

例如直到3.7,你不得不这样做:

bundle agent main 
{ 
    vars: 
    "classes" slist => { "linux", "windows" }; 

    reports: 

    "I am $(classes) box" 
     ifvarclass => "$(classes)"; 
} 

R: I am linux box 

由于3.7可以使用variable class expressions

bundle agent main 
{ 
    vars: 
    "classes" slist => { "linux", "windows" }; 

    reports: 

    "$(classes)":: 
     "I am $(classes) box"; 
} 

R: I am linux box 

这工作正常,直到你检查所包含的字符事情列表 在类中无效(如破折号)。这是ifvarclass最有用的地方 ,因为它允许您即时变换字符串,甚至使用返回布尔值的函数 ,如isvariable()

以下示例显示ifvarclasscanonify()一起使用。

bundle agent main 
{ 
    classes: 
    # A class that was derived from a string containing invalid characters like special-class 
    "special_class" expression => "any"; 

    vars: 
    "classes" slist => { "linux", "windows", "special-class" }; 

    reports: 

    "I am $(classes) box" 
     ifvarclass => canonify($(classes)); 
} 

R: I am linux box 
R: I am special-class box 
相关问题