首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"::mysql::server“和"mysql::server”的区别

"::mysql::server“和"mysql::server”的区别
EN

Stack Overflow用户
提问于 2019-03-29 12:36:23
回答 2查看 870关注 0票数 6

我在查一段旧的木偶密码。它使用mysql傀儡模块来安装mysql-server。

我偶然发现这个

代码语言:javascript
复制
class { '::mysql::server':

}

还有这个

代码语言:javascript
复制
class { 'mysql::server':
}

现在我糊涂了。他们俩的意思是一样的还是两者之间有什么区别?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-29 16:33:05

这是个很好的问题。简单地说,它们是相同的,类名不需要::

我总是假设需要初始的::来避免范围模糊(类foo中的include bar将包括::foo::bar而不是::bar),但是检查文档时,他们说,例如,include必须使用类的全名。

一个有用的例子:

代码语言:javascript
复制
$ cat scope.pp
class foo {
  class bar {
    notice("foo::bar")
  }
  class { 'bar':
  }
}

class bar {
  notice("bar")
}

class { 'foo':
}
$ puppet apply scope.pp
Notice: Scope(Class[Bar]): bar

我要注意的是,虽然这对于类作用域是正确的,但是对于Puppet中的变量作用域,情况肯定不是这样的,如下所示。

代码语言:javascript
复制
$ cat var_scope.pp
$bar = "bar"

class foo {
  $bar = "foo::bar"
  notice($::bar)
  notice($bar)
}

include foo
notice($bar)
$ puppet apply var_scope.pp
Notice: Scope(Class[Foo]): bar
Notice: Scope(Class[Foo]): foo::bar
Notice: Scope(Class[main]): bar
票数 4
EN

Stack Overflow用户

发布于 2019-04-04 19:12:11

他们俩的意思是一样的还是两者之间有什么区别?

TL;DR:对于类和定义的类型,它们的含义是相同的。支持具有领先::的表单可以看作是向后兼容特性、内部一致性特性,或者两者兼而有之。但是,对于变量,前面的::表示一个顶级变量,如果使用裸变量名,这个变量可能是也可能不是。

为了澄清@Jon已经给出的精细答案的一些细节,我们必须考虑傀儡版本3和更早版本的行为。这不再是在木偶的主要文档站点上记录的,但是我们可以在木偶的过时文件的在线档案中找到相关的文档。具体来说,我们想看看木偶命名空间和他们的行为。如果您对这类事情感兴趣,那么这些文档是一个有趣的读物,特别是关于Puppet3是如何在原来的位置结束的历史视角,但是这里有一个有点古怪的事件版本:

在一开始,Forge是无形式和无效的,没有模块。每个人都为每件事写了他们自己的代码,而虔诚的虔诚者们受到了严重的压迫,重新创造了许多车轮。

在那些日子里,模块的概念是构想出来的。当时的模块是利用当时在陆地上广泛使用的功能来构建的,例如import函数,自那以后它就消失了。但是,随着代码共享,出现了名称冲突,对此,人们用名称空间进行响应。还原剂实验室看了看名字的节奏,发现它是好的。

但并不是每件事都对还原剂或人民清楚,在无知中,还原性产生了相对的名称解析。相对名称解析对名称和命名空间进行了非常深入的检查,试图解析范围内每个名称空间中的限定名。有些人为方便而高兴,但他们中间的智者很快就陷入困境。他们清楚地认识到,相对名称分辨率看得太深了,看得太多了。它有时会看到它不想看到的东西,并为忠实的人打开了一条陷入错误的道路。

所以智者进行了干预。他们宣称,相对命名空间应该被束缚和克服,只需将名称锚定在一个真正的匿名名称空间中,即任何其他木偶之前就存在的名称空间。而枷锁的形式是领先的双结肠,::。虽然相对的名字决议经常做同样的工作,不受束缚,但许多人注意到智者,并因此而受到赞扬。

而简化,然后命名为木偶实验室,后悔创造了相对的名字决议,并敦促人们听从智者的建议。但当它出现第三代木偶,它不能使自己麻烦的人谁不关心,所以它允许相对名称决议生活。

但是在第四世纪的黎明,木偶,不再是实验室,终于找到了勇气去扼杀相对名称的解析,而它已经不复存在了。从那一天起,“木偶”就不再要求在类和类型的提供者和用户上使用领先的双冒号,但它尊重过去智慧的遗产,并同情那些不太了解它的人。

然而,在仁慈的恩惠中,木偶从所有命名的事物中选择了类变量,作为唯一有两个名字的类变量。它们有超越命名空间的作用域,在它们的作用域中,它们可以通过其定义的简单名称来知道。然而,与所有命名的事物一样,它们可以通过名称空间的名称在任何地方被识别,这些名称是由它们的简单名称和类名构成的,无论是哪种形式。但是,那么,最高范围的变量是什么呢?当他们被隐藏在阴影中时,他们能叫什么名字呢?在这里,领先的双冒号服务。它的最高作用域的标记对于变量来说并不是多余的,一些明智的人总是将其用于这些变量,从而使他们的代码变得清晰。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55417576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档