可以是标量或数组的值的技术术语是啥?
Posted
技术标签:
【中文标题】可以是标量或数组的值的技术术语是啥?【英文标题】:What is the technical term for a value which can be either a scalar or an array?可以是标量或数组的值的技术术语是什么? 【发布时间】:2016-12-05 07:34:49 【问题描述】:我正在使用JSON API 格式,它具有data
属性的概念,它可以保存标量(单个)或数组(多个)值。我正在编写用于编码和解码为格式的代码,并且在命名我的类型时,试图为这种类型的值想出一个好名字。在 TypeScript 中,它会是
type Poly<T> = T | T[];
为了您的信息,这里是 JSON API 文档的相关部分(我的重点):
主要数据必须是任一:单个资源对象、单个资源标识符对象或 null,用于针对单个资源的请求 资源对象的数组、资源标识符对象的数组或空数组 ([]),用于针对资源集合的请求
作为一个例子,这里是这样一个突变值的映射函数:
function polymap<T, U>(data: Poly<T>, fn: (input: T) => U, thisArg?: any): Poly<U>
if (data instanceof Array) return (data as T[]).map(fn, thisArg);
return fn.call(thisArg, data as T);
无论如何,如您所见,我将使用“poly”,但有什么既定的术语或其他好的建议吗?
【问题讨论】:
我相信 TypeScript 术语是来自计算机科学的术语 - 联合类型。当然,联合类型所指的远不止 T | T[] 是的,我知道联合类型,我正在为这种特殊情况寻找一些东西。 有趣的是,这种类型的问题即使是正确的答案也不会得到“没有确定的术语”的答案。如果该术语存在,有人会回答,但如果它不存在,那么任何人如何确定它不存在,而不是他不知道呢? :) 想不出名字,但更重要的是,这是一种不好的做法,它会引入复杂性并且可以欺骗 api 用户。只需发送一个包含 1 个元素的数组即可。 @AlexG 我原则上同意,但这个非标量或数组的概念已融入我正在处理的 API 中。 【参考方案1】:首先,标量和数组的区别不在于元素的数量,而在于维度。 标量是数组。具体来说,它们是 0 维数组。因此,您只需将它们全部称为数组。
但请注意,通常关注的焦点不是变量可以保持的哪些值,而是允许对变量的潜在值进行哪些操作。
有些操作可以从 1 个元素泛化到 N 个元素,这似乎是你想要的。
这种操作的 CS-y 术语是“矢量化操作”。 这种运算的数学术语是“lifting operation”。
【讨论】:
"标量是数组。具体来说,它们是 0 维数组。" --- 出于好奇,它是从哪里来的? @zerkms:什么是从哪里来的? 标量值实际上是 0d 数组的声明。这里不是类型系统/CT 专家,但我觉得这很奇怪。 感谢您的见解。作为术语,虽然理论上标量确实是 0 维数组,但因此将其称为标量数组似乎很奇怪并且可能会产生误导。我们可以将这些可能标量可能非零维数组称为“多维”值吗? @zerkms:我同意。我并不是说这是一个正式/理论的陈述,因为这个问题非常非正式/实用。 (例如,我不会在 CS.SE 上写这个。)【参考方案2】:我从未听说过这样的事情,并且从此处显示的可用 JSON 数据类型这一事实来看 http://www.tutorialspoint.com/json/json_data_types.htm 没有提及与这种数据类型相关的任何内容,我敢打赌这只是在幕后实现的烟雾和镜子。
标量值和数组的结构非常不同。将两者结合成一个真正的数据类型将是自相矛盾的。我敢打赌,当变量被实例化时,会在某处调用一个方法来检查数组或标量值的值,此时会发生两件事之一。 1- 数据类型自动设置为数组,如果给定标量,则将其转换为长度为 1 的数组,并且每当在后台调用它时,都会在索引 0 处访问数组。或 2- 后面场景方法检查传入的数据类型是什么,并在实例化实际发生之前为给定的变量设置相同的数据类型。
如果 MonoPoly Mohn-O-Pohl-E(如果你愿意的话,因为我找不到其他可以调用它的东西,而且看起来像 Monopoly)是一个标量并设置为一个数组数据类型在某些时候,旧值可以被销毁,并分配一个具有相同名称但作为数组的新值。反之亦然,所有这些也可以在幕后完成,使这种数据类型看起来包含标量和数组的描述。
【讨论】:
术语 MonoPoly 是指这种数据类型是一种(Mono)或多于一种(Poly)的事实【参考方案3】:是否有任何既定的术语用于此或其他好的 建议?
我将忽略“既定术语”,也可能忽略“好”,并根据语言提出以下建议。我个人的选择是:
阶梯
另一个可能的名词:
组装
像constant一样,我认为以下形容词已经成熟成为名词:
inconstant(类似于 incontinent,“自愿控制不足”,这似乎是您所描述的您对此 API 问题的看法。)
可转让
indiscrete(与 indiscreet 很谐音)
两用
多用途(我们学校喜欢的形容词)
这甚至可能是创造一个新词的机会:
一元化
多功能性(我的第二个最爱)
【讨论】:
你漏掉了“非常数”。【参考方案4】:当另一个元素被“添加”到插槽时,这样的功能很可能替换一个标量与一个数组。 AFAIK 没有这个词,所以这个问题看起来更像是一个英语问题。
试试这些:
弹性标量 可扩展的标量 scarray(标量/数组) scalarray(另一个组合) 可排列 tardis(比看起来的要多)【讨论】:
+1 表示 Scarray,听起来很吓人......就像整个标量数组混合的想法有点吓人...... ^^ @poby 在新列表中看到最后一个:)以上是关于可以是标量或数组的值的技术术语是啥?的主要内容,如果未能解决你的问题,请参考以下文章