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

Ben*_*son 108 scalar types programming-languages terminology primitive-types

在我读过的各种文章中,有时会引用原始数据类型,有时会引用标量.

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

是否有我遗漏的东西意味着你应该使用特定的术语或者这些术语是否可以互换?每个维基百科页面都没有显示任何明显的内容.

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

Mic*_*and 170

我认为它们不可互换.它们经常相似,但差异确实存在,并且似乎主要在于它们与背景形成对比以及与背景相关的内容.

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

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

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

  • 8年后,这对我有所帮助:) (3认同)
  • 在讨论引用类型和基本类型时还要考虑“值”类型。关于标量和原语的等价性,这取决于语言。例如,根据 PHP 手册,其原始类型中只有一半是标量:http://php.net/manual/en/language.types.intro.php (2认同)

小智 12

这些术语存在很多混淆和误用.通常一个用于表示另一个.这些术语实际上意味着什么.

"Native"指的是内置于语言中的类型,而不是由库(甚至是标准库)提供的类型,而不管它们是如何实现的.Perl字符串是Perl语言的一部分,因此它们在Perl中是原生的.C使用库提供指向字符的指针的字符串语义,因此指向char的指针是本机的,但字符串不是.

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

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

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

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

  • 虽然这种标量类型的定义对我来说最有意义,但这似乎并不是最普遍接受的. (12认同)

Sco*_*erg 9

简而言之,似乎"标量"类型指的是单个项目,而不是复合或集合.因此,标量包括原始值以及枚举值之类的内容.

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

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

  • 我被教导(很久以前在学校里)这个术语来自“标量处理器”,而不是“向量处理器”。标量处理器是一次只能处理一个数据的 CPU。这些处理器以算术术语命名。有趣的是,当您在维基百科上查找“标量”时,您会被重定向到“变量”。 (2认同)