问题标签 [unboxing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
496 浏览

scala - Scala模式匹配中的自动拆箱

在以下代码中,我收到一个编译错误,指出我在“x”上存在类型不匹配:

如何让 Scala 在 match 语句中自动拆箱 someRef?

0 投票
2 回答
1144 浏览

c# - 对 CLR 中的装箱和拆箱操作进行了哪些性能改进(如果有)?

几个月前我参加了一个研讨会,演讲者发表声明说,自 .NET 1.1 以来,装箱或拆箱操作的一般成本已经降低。我查看了我的(糟糕的)笔记,无法确定该语句是否引用了装箱和拆箱指令,或者是引入了使装箱/拆箱不太可能发生的类(即泛型类型)。

.NET 1.1 和 .NET 4.0 之间的 CLR 装箱相关指令是否有性能改进,如果是,我在哪里可以找到显示收益的测量信息?

0 投票
5 回答
926 浏览

c# - 将对象类型数据转换为值类型的最佳方法

我的任务是创建代码,使用数据读取器从数据库中获取数据,我很好奇我可以在下面使用的 3 种方法之间的最佳实践,以从我的数据读取器中转换数据,默认情况下使用一种对象。

这里让我感到困惑的是拆箱部分,根据http://msdn.microsoft.com/en-us/library/yz2be5wk.aspx 装箱和拆箱非常昂贵,应该避免。我知道我可以使用

代替

问题是仍然有方法以比这两种方法更有效的方式转换这些数据,如果没有可能的方法,您更喜欢使用这两种方法中的哪一种。在此先感谢所有帮助和建议都被接受:)

0 投票
1 回答
515 浏览

haskell - 在 Haskell 中有效处理稀疏缺失的数据

我正在尝试使用 Haskell 进行数据分析。因为我的数据集相当大(数十万甚至数百万个观察值),所以我希望使用未装箱的数据结构来提高效率,比如 Data.Vector.Unboxed。

问题是数据包含一些缺失值。我想避免将它们编码为“99”或类似的,因为这只是一个丑陋的黑客和潜在的错误来源。从我的 Haskell 新手的角度来看,我可以想到以下选项:

  1. 未打包值的盒装向量Maybe。类似的东西(如果有错误请更正):
    data myMaybe a = Nothing | Just {-# UNPACK #-} !a
  2. (unboxable)元组的未装箱向量,带有指示缺失的布尔元素:
    newtype instance Data.Vector.Unboxed.Vector (MyDatum a) = MyDatum (Data.Vector.Unboxed.Vector (Bool,a))
    这可能与此问题的 OP 选择的方法相同(模数IntBool,但唯一的答案似乎没有明确解决缺失的问题值/稀疏性(而不是专注于如何表示整个数组未装箱,而不是作为未装箱向量的装箱向量)。
  3. 一组未装箱的向量,一个带有值,另一个带有要注入缺失值的索引,或非缺失值的运行长度,或一些等效信息。这可能比选项 2 更可取。如果缺失很少?

我试图保持在向量表示中,而不是像这样,因为它是稀疏的缺失值,而不是数据

欢迎对这些选项的相对优点/可行性/现成的可用性/可能的性能提出任何评论,或者确实是指向完全不同的替代方案的指针!

编辑:

  • 有人指出,答案可能取决于我打算对数据执行什么样的操作。目前,将每个观测值存储在单个向量中似乎比每个变量更方便。由于向量中的条目因此将引用不同的变量,因此不太可能出现类似“折叠”的操作。
  • 我猜 2. 会在内部存储“有效位”向量 à la 3. 如果合适的话会自动存储,所以 3. 可以被删除吗?
0 投票
4 回答
711 浏览

c# - 装箱/拆箱是通过后期绑定还是早期绑定(即在运行时或编译时)实现的?

例如:

相似地,

0 投票
3 回答
5425 浏览

c# - C# - 装箱/拆箱/类型转换整数的问题。我不明白

我很难理解这一点。考虑以下示例:

我在运行时遇到的具体错误是如果我在 Visual Studio 中进行Specified cast is not valid. QuickWatch ,我会得到一个.(int)thirdTestCannot unbox 'thirdTest' as a 'int'

这到底是怎么回事?

0 投票
4 回答
1375 浏览

c# - 引用类的值类型成员时会发生拆箱吗?

我读了什么是装箱和拆箱以及权衡取舍是什么?但不能理解一件事。假设我有一堂课:

我想在我的方法中获得价值:

作为放置在堆中的类,我猜 Value 也放置在堆中?因此操作

是拆箱吗?还是不是拆箱?

0 投票
2 回答
261 浏览

haskell - 寻找«instance (Enum a, Bounded a) => IArray UArray a»

我正在寻找一种方法Enum a => UArray a(这对我来说很有意义,因为我们可以轻松地将枚举映射到andInt并返回)toEnumfromEnum

到目前为止,我试图UArray IntData.Array.Base窃取代码并在这里和那里走私一些toEnums 和s:fromEnum

但当然它不会编译:

也没有魔法unboxInt :: Int -> Int#in GHC.*,并且模式匹配 onI#不会产生Int而是Int#相反,但以某种方式UArray Int存在并在Int#s 上起作用。

我还发现了一篇关于为 newtypes 制作 UArray 的帖子,但它似乎并不适用,因为它依赖于unsafeCoerce. 我试过了,但它使listArray (0, 54) $ cycle [Red, Yellow, Green]所有构造函数都变得有趣Blue

我在错误的轨道上吗?

更新:

它现在可以工作了,这里是源代码:

0 投票
2 回答
340 浏览

arrays - Haskell 从数组转换为未装箱数组会破坏重写规则

我正在尝试将我的程序从使用 Data.Array 转换为 Data.Array.Unboxed。

作为一个快速的旁注:几个地方声明我可以在我的代码中将“Array”更改为“UArray”并添加 Data.Array.Unboxed 的导入,但是我没有混合两种类型的数组,所以我只是导入了 Data.Array .Unboxed 而不是 Data.Array,这就足够了吗?

当我进行切换时,以下重写规则会中断:

这里 win1 win2 和 image 应该都是 UArrays。但是,这无法编译并出现以下错误。

是什么让这模棱两可?为什么当它与 Data.Array 一起使用时会中断?

0 投票
9 回答
2191 浏览

c# - 在 c#.net 中进行类型转换

我想知道 c# .net 中的类型转换,我有以下代码行。

所以我想知道为什么string s = i and string s = (string)i不起作用以及使用有什么区别(string)i, i.ToString(), and Convert.ToString(i)