标签: mutable

使用F#进行可变值的模式匹配

我想指出F#中的"风险"部分.请考虑以下代码

let mutable a, b as ab = 0, 0
a <- 4
a
ab
Run Code Online (Sandbox Code Playgroud)

你会得到a = 4ab = 0, 0.这可能是一种正确的行为,我只想指出并了解你的意见.你觉得这种行为是否合乎逻辑,为什么?我有一些问题要接受它,因为我一直认为(a,b)和ab应该是相同的.

f# mutable pattern-matching

3
推荐指数
1
解决办法
331
查看次数

创建`collection.mutable.SortedSet` - `map`方法中的歧义

我正在尝试解决缺少的问题,collection.mutable.SortedSet这就是我的跳过列表实现.我几乎在那里:

import collection.{SortedSet => CSortedSet, SortedSetLike => CSortedSetLike}
import collection.mutable.{Set => MSet, SetLike => MSetLike}
import collection.generic.{MutableSetFactory, GenericCompanion}

object SkipList extends MutableSetFactory[SkipList] {
  def empty[A](implicit ord: Ordering[A]): SkipList[A] = ???
}

trait SkipList[A] extends MSet[A] with MSetLike[A, SkipList[A]] with CSortedSet[A]
  with CSortedSetLike[A, SkipList[A]] {

  override def empty: SkipList[A] = SkipList.empty[A](ordering)

  def rangeImpl(from: Option[A], until: Option[A]): SkipList[A] =
    throw new Exception("Unsupported operation")
}
Run Code Online (Sandbox Code Playgroud)

好的,这个编译.但与不可变排序集不同,我可以毫不含糊地做

case class Holder(i: Int) extends Ordered[Holder] {
  def compare(b: Holder) = i.compare(b.i)
}

def test1(iss: …
Run Code Online (Sandbox Code Playgroud)

collections scala mutable set implicit-conversion

3
推荐指数
1
解决办法
747
查看次数

可变结构与类?

我不确定是使用可变结构还是可变类.我的程序存储了一个包含大量对象的数组.我注意到使用类会使所需的内存量翻倍.但是,我希望这些对象是可变的,并且我被告知使用可变结构是邪恶的.这就是我的类型:

struct /* or class */ Block
{
    public byte ID;
    public bool HasMetaData; // not sure whether HasMetaData == false or
                             // MetaData == null is faster, might remove this
    public BlockMetaData MetaData; // BlockMetaData is always a class reference
}
Run Code Online (Sandbox Code Playgroud)

像这样分配大量的对象(注意下面的两个代码都运行了81次):

// struct
Block[,,] blocks = new Block[16, 256, 16];
Run Code Online (Sandbox Code Playgroud)

使用大约35 MiB的内存,同时这样做:

// class
Block[,,] blocks = new Block[16, 256, 16];
for (int z = 0; z < 16; z++)
for (int y = 0; y < 256; …
Run Code Online (Sandbox Code Playgroud)

c# memory struct class mutable

3
推荐指数
1
解决办法
2910
查看次数

我应该如何组合St monad和State monad(或等效的)?

我正在构建代码以获得理解,实际上是Solitaire求解器.我有一个简单的暴力实现,它使用状态monad,实际上只是为了证明我可以使用它(它只保留每个移动的计数).但是现在我想使用Unboxed Mutable数组来记录被访问的​​板,从而在我到达已经通过另一条路径访问的板位置时快速评估路径.似乎ST monad不允许我线程隐式状态,但是我必须使用ST(或IO)才能访问Mutable数组.因此,似乎我必须结合两个Monads - State来线程化状态(实际上包括一个Mutable数组),另一个(ST)来获得Mutable数组函数.

  • 这是正确的吗?
  • 如果是这样,有没有比Data.Array.ST/Control.Monad.ST/Control.Monad.ST和mtl的(规范?)组合更好的选择?
  • 如果我走这条路线,那么堆叠ST和State的顺序是否重要?
  • 为了避免使用monad变压器,我应该考虑根据ST或State中的任何一个或两个来编辑我自己的单个Monad吗?

arrays haskell mutable state-monad monad-transformers

3
推荐指数
2
解决办法
342
查看次数

Python copy.deepcopy()函数无法正常工作

我一直在玩deepcopy功能和复制功能,我对它们都有同样的问题.这就像副本是一个引用(或指针)而不是正确的副本.我正在使用Python中的数据记录(类),也许它可能是..我给你看一个例子:

>>> import copy
>>> class player1:
...    age = 23
...    score = 1
>>> class player2:
...    age = 14
...    score = 2
>>> player3 = copy.deepcopy(player1)
Run Code Online (Sandbox Code Playgroud)

我打印参数.

>>> print player1.age, player1.score
23 1
>>> print player2.age, player2.score
14 2
>>> print player3.age, player3.score
23 1
Run Code Online (Sandbox Code Playgroud)

现在我在player1数据记录中增加score参数.

>>> player1.score += 3
Run Code Online (Sandbox Code Playgroud)

然后我再次打印结果.

>>> print player1.age, player1.score
23 4
>>> print player2.age, player2.score
14 2
>>> print player3.age, player3.score
23 4 
Run Code Online (Sandbox Code Playgroud)

为什么玩家3会改变?我只是增加了player1中的参数,而不是player3.它是可变的而不是不可变的.

提前致谢.

python copy reference class mutable

3
推荐指数
2
解决办法
6521
查看次数

使用AtomicInteger作为可变整数的替代是一种好习惯吗?

我有以下几种情况:我在这里展示的是简单的代码形式,以澄清我的担忧:

public void callMe()
{
 AtomicInteger howManyOdds = new AtomicInteger(0);
 AtomicInteger howManyEvens = new AtomicInteger(0);
 loopThrough(100,howManyOdds,howManyEvens);
 System.out.println(howManyOdds.get()+" "+howManyEvens.get());
}
private void loopThrough(int counter,AtomicInteger howManyOdds,AtomicInteger howManyEvens)
{
 for(int i = 1 ; i <= counter ;i++)
 {
  if(i%2 == 0)
  howManyEvens.getAndAdd(1);
  else
  howManyOdds.getAndAdd(1);
 }
}
Run Code Online (Sandbox Code Playgroud)

我知道它可以通过int[]但它看起来有点奇怪.在这种情况下,AtomicInteger是Mutable Integer的良好替代品吗?如果不是那么为什么?

java mutable atomicinteger

3
推荐指数
1
解决办法
1161
查看次数

3
推荐指数
1
解决办法
221
查看次数

引用一个int的盒子和引用一个int的锈之间的区别?

好吧,我最近开始在Rust中编程,我需要帮助。这是我的代码。它应该引用分配给int的堆并更改其值。

let mut boxed_int = box 5;
let _ref_to_int   = &mut *boxed_int;   // why it is &int ???
*_ref_to_int      = 10;

let mut boxed_int = box 5;
let _ref_to_int   = &mut boxed_int;
*_ref_to_int      = box 10;
Run Code Online (Sandbox Code Playgroud)

最后一行会从堆中删除5并在同一地址分配10吗?或5不被删除,现在指针指向堆上另一个值为10的地址

pointers reference mutable rust

3
推荐指数
1
解决办法
991
查看次数

使用case-classes进行可变状态是否(真的那么糟糕)?

请考虑以下代码:

case class Vector3(var x: Float, var y: Float, var z: Float)
{
  def add(v: Vector3): Unit =
  {
    this.x += v.x
    this.y += v.y
    this.z += v.z
  }
}
Run Code Online (Sandbox Code Playgroud)

如你所见,case class持有可变状态.这样做是非常沮丧的,通常我同意并且绝对坚持这个"规则",但这里讲的是整个故事.

我正在使用Scala 从头开始编写一个小型3D游戏引擎.所以首先我考虑使用(更多)功能样式,但垃圾收集器会过于频繁.

想一想:我在测试游戏中有几十个实体.所有这些都有一个位置(Vector3),一个方向(Vector3),一个比例(Vector3)和一大堆矩阵.如果我要在这些类(Vector3和Matrix4)中运行并使它们不可变,我会每帧返回数百个新对象,导致巨大的fps损失,因为,让我们面对它,GC有其用途,但在游戏引擎和OpenGL ......不是那么多.

Vector3之前是一个类,但它现在是一个case类,因为代码中的某个地方我需要模式匹配.

那么,使用保持可变状态的案例类真的那么糟糕吗?

请不要把它变成一个关于讨论"为什么你甚至可以使用Scala开发等项目吗?" 我知道可能有更好的替代方案,但我对用C++编写(又一个)引擎不感兴趣,我也不太愿意潜入Rust(还).

scala mutable case-class

3
推荐指数
1
解决办法
760
查看次数

Scala:为什么如果从GroupBy创建Map,则无法更改Map中的可变值

我想创建一个键为整数且值为可变Set的Map对象。但是,当我从GroupBy函数创建Map对象时,可变集合中的值无法再更改。谁能告诉我为什么会这样?

import scala.collection.mutable

val groupedMap: Map[Int, mutable.Set[Int]] = 
    List((1,1),(1,2),(2,3))
        .groupBy(_._1)
        .mapValues(_.map(_._2).to[mutable.Set])

val originalMap: Map[Int, mutable.Set[Int]] =
    Map(1 -> mutable.Set(1, 2), 2 -> mutable.Set(3))

println(groupedMap) // Map(1 -> Set(1, 2), 2 -> Set(3))
println(originalMap) // Map(1 -> Set(1, 2), 2 -> Set(3))

groupedMap(1) += 99
originalMap(1) += 99

println(groupedMap) // Map(1 -> Set(1, 2), 2 -> Set(3))  <- HERE IS THE PROBLEM, THE VALUE 99 CAN NOT BE ADDED TO MY MUTABLE SET!
println(originalMap) // Map(1 -> Set(99, 1, …
Run Code Online (Sandbox Code Playgroud)

dictionary scala group-by mutable set

3
推荐指数
1
解决办法
46
查看次数