scala设计者为啥要提供package object

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scala设计者为啥要提供package object相关的知识,希望对你有一定的参考价值。

参考技术A Scala类和java类中有些区别,在Scala声明private变量会Scala编译器会自动生成get,set,在Scala中变量是需要初始化的,如果不声明private默认是public的objectScala中没有静态修饰符,static,在object下的成员全部都是静态的,如果在类中声明了与该类相同的名字的object则该object是该类的“半生对象”,可以理解把类中的static集中放到了object对象中,伴生对象和类文件必须是同一个源文件,可以用伴生对象做一些初始化的操作。trait在java中可以通过interface实现多重继承,在Scala中可以通过特征(trait)实现多重继承,不过与java不同的是,它可以定义自己的属性和实现方法体,在没有自己的实现方法体时可以认为它时javainterface是等价的,在Scala中也是一般只能继承一个父类,可以通过多个with进行多重继承。

为啥“npm install”会修改 package-lock.json?那为啥要把它提交给git呢?

【中文标题】为啥“npm install”会修改 package-lock.json?那为啥要把它提交给git呢?【英文标题】:Why does "npm install" modify package-lock.json? Why commit it to git then?为什么“npm install”会修改 package-lock.json?那为什么要把它提交给git呢? 【发布时间】:2019-03-31 07:53:35 【问题描述】:

当我在项目中运行“npm install”时,它经常会修改 package-lock.json,例如,如果我在另一台计算机上处​​理同一个项目(使用不同的节点或 npm 版本)。

但同时文档建议该文件应该添加到版本控制(在我的情况下为 git):

https://docs.npmjs.com/files/package-lock.json

此文件旨在提交到源存储库中,并且 有多种用途:...

那么我应该在切换工作机器或其他人npm install 时来回提交 npm 所做的更改吗?这将是一场噩梦。

目前我只是放弃了 npm 对 package-lock.json 所做的任何更改,它运行良好。所以我还不如将它添加到.gitignore...

我做错了吗?我应该改用npm ci 吗?我不会称我的电脑为“CI”,它只是一台开发机器,我为什么要在那里使用它?

基本上我和这位先生有同样的问题:

https://github.com/npm/npm/issues/18103#issuecomment-370401935

(遗憾的是,我根本无法对该问题添加评论或创建新问题,npm 存储库已禁用问题)

【问题讨论】:

Do I commit the package-lock.json file created by npm 5?的可能重复 这很复杂。官方应该提交 package-lock.json,但很多人没有。要了解,您还需要阅读 npm shrinkwrapnpm ci。请参阅以下相关问题:***.com/questions/52499617/…、***.com/questions/44206782/…。 【参考方案1】:

是的,您希望将您的 package-lock.json 文件提交到源代码管理。这背后的原因是为了确保为每个下拉代码的用户下载和安装每个包的所有相同版本。包含该文件还有其他一些原因,例如跟踪对包树的更改以供审核。

【讨论】:

是的,我了解锁定文件的用途,但在 npm 的情况下,它实际上会安装 不同 版本的软件包而不是锁定文件中的软件包(并修改了这些版本在做的时候)-这个我不明白 从 NPM 版本 5.1.0 开始,就 package.json 中更高的依赖包版本而言,package.json 可以胜过 package-lock.json。这可以通过删除锁定文件中包版本中的波浪号来解决。

以上是关于scala设计者为啥要提供package object的主要内容,如果未能解决你的问题,请参考以下文章

.啥是多态?面向对象程序设计为啥要引入多态的特性?使用多态有啥优点?

为啥 scala.Serializable 没有指定任何方法?

为啥 sbt-native-packager 不生成 bin 目录?

为啥 DataFrame 在 spark 2.2 中仍然存在,甚至 DataSet 在 scala 中也提供了更多的性能? [复制]

Scala 面向对象:package 包

c# 泛型为啥能解决装箱拆箱问题