草庐IT

Immutability

全部标签

javascript - 我如何解决 moment.js 中的可变性问题?

我遇到了一个问题,我必须存储一个moment对象的初始值,但我在阻止我的变量随原始对象一起改变时遇到了一些麻烦。不幸的是Object.freeze()不起作用,因为当我尝试格式化时moment.js返回一个Invaliddate错误。 最佳答案 NPM上有一个名为frozen-moment的Moment.js插件-您可以使用moment().freeze()代替Object.freeze(moment())。否则,普通的Moment.js有一个clone方法可以帮助您避免可变性问题,因此您可以这样做:vara=moment(),b=

javascript - 我如何解决 moment.js 中的可变性问题?

我遇到了一个问题,我必须存储一个moment对象的初始值,但我在阻止我的变量随原始对象一起改变时遇到了一些麻烦。不幸的是Object.freeze()不起作用,因为当我尝试格式化时moment.js返回一个Invaliddate错误。 最佳答案 NPM上有一个名为frozen-moment的Moment.js插件-您可以使用moment().freeze()代替Object.freeze(moment())。否则,普通的Moment.js有一个clone方法可以帮助您避免可变性问题,因此您可以这样做:vara=moment(),b=

javascript - 带有 ES6 的 Javascript 中的枚举

我正在用Javascript重建一个旧的Java项目,并意识到在JS中没有做枚举的好方法。我能想到的最好的是:constColors={RED:Symbol("red"),BLUE:Symbol("blue"),GREEN:Symbol("green")};Object.freeze(Colors);const可以防止Colors被重新分配,卡住它可以防止改变键和值。我正在使用Symbols,因此Colors.RED不等于0或除自身之外的任何其他内容。这个公式有问题吗?有没有更好的方法?(我知道这个问题有点重复,但是所有的previousQ/As都很旧,ES6给了我们一些新的能力。)编

javascript - 带有 ES6 的 Javascript 中的枚举

我正在用Javascript重建一个旧的Java项目,并意识到在JS中没有做枚举的好方法。我能想到的最好的是:constColors={RED:Symbol("red"),BLUE:Symbol("blue"),GREEN:Symbol("green")};Object.freeze(Colors);const可以防止Colors被重新分配,卡住它可以防止改变键和值。我正在使用Symbols,因此Colors.RED不等于0或除自身之外的任何其他内容。这个公式有问题吗?有没有更好的方法?(我知道这个问题有点重复,但是所有的previousQ/As都很旧,ES6给了我们一些新的能力。)编

java - 为什么继续对不可变对象(immutable对象)使用 getter?

使用不可变对象(immutable对象)已变得越来越普遍,即使手头的程序从未打算并行运行。然而我们仍然使用getter,每个字段需要3行样板代码,每次访问需要5个额外字符(使用您最喜欢的主流OO语言)。虽然这看起来微不足道,而且许多编辑器无论如何都减轻了程序员的大部分负担,但这似乎仍然是不必要的努力。继续使用访问器而不是直接访问不可变对象(immutable对象)的原因是什么?具体来说,强制用户使用访问器(对于客户端或库编写器)有什么好处,如果是,它们是什么?请注意,我指的是不可变对象,与question不同,它指的是一般的对象。需要明确的是,不可变对象(immutable对象)没有s

java - 为什么继续对不可变对象(immutable对象)使用 getter?

使用不可变对象(immutable对象)已变得越来越普遍,即使手头的程序从未打算并行运行。然而我们仍然使用getter,每个字段需要3行样板代码,每次访问需要5个额外字符(使用您最喜欢的主流OO语言)。虽然这看起来微不足道,而且许多编辑器无论如何都减轻了程序员的大部分负担,但这似乎仍然是不必要的努力。继续使用访问器而不是直接访问不可变对象(immutable对象)的原因是什么?具体来说,强制用户使用访问器(对于客户端或库编写器)有什么好处,如果是,它们是什么?请注意,我指的是不可变对象,与question不同,它指的是一般的对象。需要明确的是,不可变对象(immutable对象)没有s

java - 字符串不可变的非技术优势

我想知道从程序员的角度来看字符串类型不变的好处。技术优势(在编译器/语言方面)可以概括为,如果类型是不可变的,则更容易进行优化。阅读here以获得相关问题。同样,在可变的字符串类型中,要么您已经内置了线程安全性(然后又很难进行优化),要么您必须自己进行。无论如何,您都可以选择使用具有内置线程安全性的可变字符串类型,因此这并不是可变字符串类型的真正优势。(同样,更容易进行处理和优化以确保不可变类型上的线程安全,但这不是重点。)但是,不可变字符串类型在用法中有什么好处?某些类型不可变的意义何在?这对我来说似乎很矛盾。在C++中,如果我想使某些字符串不可变,则将其作为对函数的const引用(

java - 字符串不可变的非技术优势

我想知道从程序员的角度来看字符串类型不变的好处。技术优势(在编译器/语言方面)可以概括为,如果类型是不可变的,则更容易进行优化。阅读here以获得相关问题。同样,在可变的字符串类型中,要么您已经内置了线程安全性(然后又很难进行优化),要么您必须自己进行。无论如何,您都可以选择使用具有内置线程安全性的可变字符串类型,因此这并不是可变字符串类型的真正优势。(同样,更容易进行处理和优化以确保不可变类型上的线程安全,但这不是重点。)但是,不可变字符串类型在用法中有什么好处?某些类型不可变的意义何在?这对我来说似乎很矛盾。在C++中,如果我想使某些字符串不可变,则将其作为对函数的const引用(

python - 可变和不可变类型背后的理论是什么?

我欣赏Python的一件事是它区分了可变类型和不可变类型。在开始使用Python之前,我在c中进行了一段时间的编程,我很惊讶Python可以轻松地消除指针取消引用的所有复杂性,这些复杂性让我在c中发疯。在Python中,一切都按我预期的方式工作,我很快意识到可变/不可变的区别在其中起着重要作用。当然还有一些问题(可变函数参数默认是一个值得注意的例子),但总的来说,我觉得可变/不可变的区别极大地阐明了变量及其值是什么的问题以及他们应该如何表现。但它从何而来?我不得不假设GvR不是第一个想到这种区别的人,Python也不是第一个使用它的语言。我有兴趣了解使用此概念的早期语言,以及有关它的任

python - 可变和不可变类型背后的理论是什么?

我欣赏Python的一件事是它区分了可变类型和不可变类型。在开始使用Python之前,我在c中进行了一段时间的编程,我很惊讶Python可以轻松地消除指针取消引用的所有复杂性,这些复杂性让我在c中发疯。在Python中,一切都按我预期的方式工作,我很快意识到可变/不可变的区别在其中起着重要作用。当然还有一些问题(可变函数参数默认是一个值得注意的例子),但总的来说,我觉得可变/不可变的区别极大地阐明了变量及其值是什么的问题以及他们应该如何表现。但它从何而来?我不得不假设GvR不是第一个想到这种区别的人,Python也不是第一个使用它的语言。我有兴趣了解使用此概念的早期语言,以及有关它的任