标量与原始数据类型 - 它们是一样的吗?

时间:2011-07-08 10:22:55

标签: programming-languages types terminology primitive-types scalar

在我读过的各篇文章中,有时会提到原始数据类型,有时会引用标量。

我对每一个的理解是它们是简单的数据类型,如int,boolean,char等。

我缺少什么意味着你应该使用特定的术语,或者这些术语是否可以互换? 每个维基百科页面都没有显示任何明显的内容。

如果这些条款只是可以互换的,那么这是首选条款吗?

7 个答案:

答案 0 :(得分:155)

我认为它们不可互换。它们经常相似,但差异确实存在,似乎主要与它们形成鲜明对比,与背景相关。

Scalars 通常与化合物形成对比,例如数组,映射,集合,结构等。标量是一个“单一”值 - 整数,布尔值,也许一个字符串 - 虽然一个化合物由多个标量组成(可能还有对其他化合物的引用)。 “标量”用于上下文中,其中相关区别在单/简单/原子值和复合值之间。

然而,

原始类型与例如引用类型,当相关区别为“这是一个直接值是一个值,还是对包含实际值的东西的引用?”时使用,如Java的原始类型与引用一样。我认为这是一个比标量/复合更低级别的区别,但并不完全。

这实际上取决于背景(经常讨论什么语言家族)。采取一个,可能是病态的例子:字符串。在C中,字符串是复合(字符数组),而在Perl中,字符串是标量。在Java中,字符串是对象(或引用类型)。在Python中,一切都是(概念上)对象/引用类型,包括字符串(和数字)。

答案 1 :(得分:11)

这些术语存在很多混淆和误用。通常一个用于表示另一个。以下是这些术语的实际含义。

" Native" 指的是内置于该语言中的类型,而不是由库(甚至标准库)提供的类型,无论它们如何&#39 ;重新实施。 Perl字符串是Perl语言的一部分,因此它们在Perl中是原生的。 C使用库提供指向字符的指针的字符串语义,因此指向char的指针是本机的,但字符串不是。

" Atomic" 是指无法再分解的类型。它与" composite" 相反。复合材料可以分解为原子值或其他复合材料的组合。本机整数和浮点数是原子的。分数,复数,容器/集合和字符串是复合的。

" Scalar" - 这是让大多数人感到困惑的一个 - 指的是可以表达比例(因此名称)的值,例如大小,音量,计数等。整数,浮点数和分数是标量。复数,布尔值和字符串是 NOT 标量。原子的东西不一定是标量,而标量的东西不一定是原子的。标量可以是原生的,也可以由图书馆提供。

有些类型有奇怪的分类。 BigNumber类型通常作为数字或整数数组实现,是标量,但它们在技术上不是原子的。如果隐藏实现并且您无法访问内部组件,它们可能看起来是原子的。但是组件只是隐藏的,所以原子性是一种幻觉。它们几乎总是在图书馆中提供,因此它们不是原生的,但它们可能是原生的。例如,在Mathematica编程语言中,大数字是原生的,并且由于Mathematica程序无法将它们分解为它们的构建块,因此它们在该上下文中也是原子的,尽管事实上他们是复合材料(在你不再使用Mathematica语言的世界里)。

这些定义与所使用的语言无关。

答案 2 :(得分:6)

简单地说,似乎“标量”类型指的是单个项目,而不是复合或集合。因此,标量包括原始值以及枚举值等内容。

http://ee.hawaii.edu/~tep/EE160/Book/chap5/section2.1.3.html

也许'标量'一词可能是C的回归:

  

其中标量是包含单个值且不是由其他C ++对象组成的原始对象

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1995/N0774.pdf

我很好奇这是否指的是这些物品是否具有'规模'的价值? - 比如计算数字。

答案 3 :(得分:3)

我喜欢Scott Langeberg的答案,因为它简洁明了,并且有权威的链接。如果可以的话,我会投票给斯科特的答案。

我认为“原始”数据类型可以被认为是主要数据类型,因此辅助数据类型是从主要数据类型派生的。派生是通过组合,例如C ++结构。结构可用于组合数据类型(例如,int和char)以获取辅助数据类型。结构定义的数据类型始终是辅助数据类型。主要数据类型不是从任何东西派生的,而是在编程语言中给出的。

我有一个与原语相似的命名法,意思是主要的。并行是“正则表达式”。我认为术语“常规”可以理解为“调节”。因此,您有一个调节搜索的表达式。

标量词源(http://www.etymonline.com/index.php?allowed_in_frame=0&search=scalar&searchmode=none)表示阶梯状。我认为这与编程有关的方式是梯子只有一个维度:梯子末端有多少梯级。标量数据类型只有一个维度,因此由单个值表示。

我认为在使用中,原始和标量是可以互换的。有没有标量的原语或者不是原始的标量的例子吗?

虽然可互换,但原语是​​指数据类型是其他数据类型的基本构建块,而基元不是由其他数据类型组成。

标量指的是它具有单个值。标量与数学向量形成对比。矢量不是由单个值表示的,因为(使用一种矢量作为示例)需要一个值来表示矢量的方向,而另一个值需要表示矢量的幅度。

参考链接: http://whatis.techtarget.com/definition/primitive http://en.wikipedia.org/wiki/Primitive_data_type

答案 4 :(得分:0)

在C中,枚举类型,字符和整数的各种表示形成一个更通用的类型类,称为标量类型。因此,您可以对任何标量类型的值执行的操作与整数的操作相同。

答案 5 :(得分:0)

空类型是最现实地符合“标量类型”定义的东西。甚至将“无”序列化为“ N”。适合传统上为标量的16位字-甚至是具有多个可能值的单个位-都不是“单个数据”。

答案 6 :(得分:0)

每个基元都是标量,但反之亦然。 DateTime是标量的,但不是原始的。

相关问题