首先,我承认这个问题可能是重复的; 请告诉我
我很好奇当需要可变性时,对于那些情况,一般的"最佳实践"是什么.F#似乎为此提供了两种工具:let mutable绑定,它似乎像"大多数"语言中的变量一样工作,而参考单元(使用ref函数创建)需要显式解除引用才能使用.
有一对夫妇的情况下,其中一个是"被迫"转化为一种或另一种:.NET互操作倾向于使用可变带<-,并在工作流程的计算必须使用ref带:=.所以这些案例非常明确,但我很好奇在这些场景之外创建自己的可变变量时该怎么做.一种风格比另一种风格有什么优势?(也许对实施的进一步了解会有所帮助.)
谢谢!
将元素添加到scala.collection.mutable.Map的语法是什么?
以下是一些失败的尝试:
val map = scala.collection.mutable.Map
map("mykey") = "myval"
map += "mykey" -> "myval"
map.put("mykey","myval")
Run Code Online (Sandbox Code Playgroud) private[this]object MMMap extends HashMap[A, Set[B]] with MultiMap[A, B]
Run Code Online (Sandbox Code Playgroud)
如何将其转换为不可变?
我正在通过推特使用Typeahead.我正在接受Intellij的这个警告.这导致每个链接的"window.location.href"成为我的项目列表中的最后一项.
我该如何修复我的代码?
以下是我的代码:
AutoSuggest.prototype.config = function () {
var me = this;
var comp, options;
var gotoUrl = "/{0}/{1}";
var imgurl = '<img src="/icon/{0}.gif"/>';
var target;
for (var i = 0; i < me.targets.length; i++) {
target = me.targets[i];
if ($("#" + target.inputId).length != 0) {
options = {
source: function (query, process) { // where to get the data
process(me.results);
},
// set max results to display
items: 10,
matcher: function (item) { // how to make sure the …Run Code Online (Sandbox Code Playgroud) 我处在一种情况,我想使用像Integer这样的可变版本.我是否必须使用这些类(下面)或者Java内置了什么?
http://www.java2s.com/Code/Java/Data-Type/Amutableintwrapper.htm
我有一个数组我想变成一个List,以便修改数组的内容.
堆栈溢出有大量的问题/,解决答案Arrays.asList()以及它如何仅提供底层阵列的列表视图,以及如何试图操纵所得列表通常将引发UnsupportedOperationException如用来操纵列表方法(例如add(),remove()等)是没有由List提供的实现实现Arrays.asList().
但我找不到如何将数组转换为可变List的示例.我想我可以循环遍历数组并将put()每个值循环到一个新的List中,但我想知道是否存在为我执行此操作的接口.
将可变对象用作Hashmap键是不好的做法吗?当您尝试使用已修改足以更改其哈希码的密钥从Hashmap检索值时会发生什么?
例如,给定
class Key
{
int a; //mutable field
int b; //mutable field
public int hashcode()
return foo(a, b);
// setters setA and setB omitted for brevity
}
Run Code Online (Sandbox Code Playgroud)
用代码
HashMap<Key, Value> map = new HashMap<Key, Value>();
Key key1 = new Key(0, 0);
map.put(key1, value1); // value1 is an instance of Value
key1.setA(5);
key1.setB(10);
Run Code Online (Sandbox Code Playgroud)
如果我们现在打电话map.get(key1)怎么办?这是安全的还是可取的?或者行为是否依赖于语言?
在Python中将一个可变对象设置为函数中参数的默认值是一个常见的错误.以下是David Goodger撰写的优秀文章中的一个例子:
>>> def bad_append(new_item, a_list=[]):
a_list.append(new_item)
return a_list
>>> print bad_append('one')
['one']
>>> print bad_append('two')
['one', 'two']
Run Code Online (Sandbox Code Playgroud)
之所以出现这种情况的解释是在这里.
现在我的问题是:这个语法有一个很好的用例吗?
我的意思是,如果遇到它的每个人都犯了同样的错误,调试它,理解问题,从而试图避免它,这种语法有什么用?
不确定这是一个风格问题,还是一个有硬规则的东西......
如果我想尽可能保持公共方法接口为const,但是使对象线程安全,我应该使用可变互斥锁吗?一般来说,这是一个好样式,还是应该首选非const方法接口?请证明你的观点.
我想做这个:
struct Point {
x: i32,
y: i32,
}
impl Point {
fn up(&self) {
self.y += 1;
}
}
fn main() {
let p = Point { x: 0, y: 0 };
p.up();
}
Run Code Online (Sandbox Code Playgroud)
但是这段代码抛出了编译器错误:
error[E0594]: cannot assign to field `self.y` of immutable binding
--> src/main.rs:8:9
|
7 | fn up(&self) {
| ----- use `&mut self` here to make mutable
8 | self.y += 1;
| ^^^^^^^^^^^ cannot mutably borrow field of immutable binding
Run Code Online (Sandbox Code Playgroud)