命名约定“@@/”(斜线)从何而来?

Where does the naming convention "@@/" (at-at-slash) come from?

我在许多 JavaScript 库中看到过它(例如 transducers-js, routex and redux)。我假设它是一种命名空间形式,但我在任何地方都找不到解释或至少是关于它的评论。

"@@/" 是 .

的用户空间、域特定类比

通常,“@@/”的格式为 "@@$NAMESPACE/$property",其中 $NAMESPACE 是某个域标识符,$property 是该域的 属性。

"@@/" 并不是众所周知的符号,因为一方面,它们是字符串;它们也不属于该问题中引用的规范的一部分。 “@@/”确实类似于众所周知的符号 @@,因为它们都会影响特定于域的行为。 @@ 的域是 "all Code Realms" == "all instances of a JavaScript environment" == 几乎所有内容。 “@@/”的域是 NAMESPACE.

这里是“@@/”在transducers.js、routex、redux

之间的用法对比

transducers.js - JavaScript

中的传感器实现
{
  "@@transducer/init": () => {...},
  "@@transducer/result": (result) => {...},
  "@@transducer/step": (result, input) => {...},
}

您可以在此处实现“@@/”方法以符合transducers.js 转换器协议。如果一个对象符合转换器协议,则它可以与符合此协议的其他对象组合以符合另一个协议:transducers.js 转换器协议。

routex - 用于 redux 的简单路由器

export const ROUTE_CHANGE_START = '@@ROUTEX/ROUTE_CHANGE_START';
export const ROUTE_CHANGE_SUCCESS = '@@ROUTEX/ROUTE_CHANGE_SUCCESS';
export const ROUTE_CHANGE_FAIL = '@@ROUTEX/ROUTE_CHANGE_FAIL';
export const ROUTE_NOT_FOUND = '@@ROUTEX/ROUTE_NOT_FOUND';
export const TRANSITION_TO = '@@ROUTEX/TRANSITION_TO';

routex 使用“@@/”作为常量。它们出现在该路由器 actions.js 的导出操作的 type 字段中。它们用于实现 reducer,导出用于 redux 和您自己的状态 + 动作减速器

redux - 管理 JavaScript 应用程序的状态

const ActionTypes = {
  INIT: `@@redux/INIT${randomString()}`,
  REPLACE: `@@redux/REPLACE${randomString()}`,
  PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`
}

redux 也使用“@@/”作为常量;这些中的每一个都用于验证减速器形状。 ActionTypes.INIT 进一步用于 combineReducers getUnexpectedStateShapeWarningMessage to conditionally format the returned message. ActionTypes.REPLACE was added in this pull request 以在验证减速器形状时处理烦人的警告消息。

简而言之,这些都是“@@/”的不同情况。 transducers.js 使用它们来实现他们的转换器协议,routex 使用它们作为常量,而 redux 使用它们来验证输入。他们可能没有单一的起源,尽管他们可能从 @@

中汲取了灵感