English 中文(简体)
在Rego,为什么“永远”永远不会错?
原标题:In Rego, why is "every" never false?
  • 时间:2023-06-19 06:44:29
  •  标签:
  • rego
The bounty expires in 6 days. Answers to this question are eligible for a +100 reputation bounty. Old Pro is looking for a canonical answer.

根据,载于Rego,every,评价要么至true,要么。 为什么没有<代码>true false? Rego 究竟是什么意思? 相比之下,。 成员操作员in 总是对<代码>true或false进行评价,这更符合我对every的期望。

我发现,关于<代码>false和un下定义的之间的区别的解释,但我并不认为这一解释是明智的。

不确定和假的区别在于,Rego的未定义并非你可以在Rego(因为假造只是另一个名人的价值)中提及的价值。 关于问询和规则如何评价的问题,不明确和错误的做法也一样。 为了成功(或为了制定价值规则),询问中的所有陈述(或规则的主体)必须是真实的。 在Rego,除未经界定和虚假外,所有价值都被视为真实的。

很明显,Rego正在使用un specified,其方式不同于其他语文,通常表明缺乏某种信息。 例如,在 Java,如果你提到已经宣布但尚未开始的变数,其价值为<代码>un Defin<>。 但是,在Rego例中,every被完全界定,但评价的是un defined而不是

因此,在Rego,使用un specified的理论是什么?

问题回答

这是我第一次听到雷戈的话,我去了他们想帮助的docs,我也赞同我的理解。

https://www. openpolicyagent.org/docs/latest/policy-language/#the-basics” rel=“nofollow noretinger” 基本部分:

你们可以使用一条规则界定新的概念。 例如,如果平等表达是真实的,则以下事实是真实的。

v if "hello" == "world"

如果我们评估,结果就没有界定,因为该规则的主体从未评价过。 因此,该规则产生的文件没有界定。

如果是“真实”的,那么<代码>v就可看到您在Rego中是如何思考的,那么如果该表述是“真实的”,那么该表述就会执行。

提及未定义的价值观的言论也没有界定。 这包括比较,例如!

v == true // undefined decision
v != true // undefined decision

除<条码>未定义的和伪造外,所有数值均视为<条码>。

un Defin,但实际差异是:

false。

Rego使用JSON的比较,因此将检测为JSON,然后确认为false ,说明我们为什么要提供unfin。 相反,我们避免了这种情况。

我很想知道false及其使用案例,我发现这个例子:here:

default allow := false

allow if {
    input.user == "bob"
    input.method == "GET"
}

allow if input.user == "alice"

在此,我们先将<代码>allow与default。 <代码>false的关键词 即便如此,它还是受到以下条件的影响:false

如果没有缺省定义,<代码>allow的文件将只是un specified,以便提供相同的投入。

仍然看不到这一点是否有用,因为:

无定义和虚假的行为也一样。 为了成功(或为了制定价值规则),询问中的所有陈述(或规则的主体)必须是真实的。

因此,我仍然可以处理<代码>allow as un defined (note:, 本条从default。 关键词节

另一个例子是in 该职能旨在退回<代码>true或fal。 因此,我们可以在一条规则中加以使用,看v?

就像:

v if "hello" == "world"

我们用“成员操作者<代码>in”取代if “hello”=“world”:

every server in site.servers {
        endswith(server.name, "-dev")
}

同一逻辑的,规则的结果将是true false, 然后every





相关问题
在Rego,为什么“永远”永远不会错?

根据“开放政策”文件,在Rego,每一份评估都是真实的或未界定的。 为什么不真实或虚假? Rego指的是虚假的错误价值是什么? ......

热门标签