命名约定“@@ /”(at-at-slash)来自哪里?

时间:2015-10-06 18:53:53

标签: javascript naming-conventions conventions

我在许多JavaScript库中看到过它(例如transducers-jsroutexredux)。我认为这是一种命名空间,但我无法在任何地方找到解释或至少有任何评论。

1 个答案:

答案 0 :(得分:1)

“ @@ /”是well-known symbols的用户域特定域类似物。

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

“ @@ /”并不是完全众所周知的符号,因为,其中之一是字符串。它们也不是该问题中引用的规范的一部分。 “ @@ /”确实类似于众所周知的符号@@,因为它们都影响特定于域的行为。 @@的域是“所有代码领域” ==“ JavaScript环境的所有实例” ==几乎所有内容。 “ @@ /”的域为NAMESPACE

这里是对converters.js,routex和redux之间“ @@ /”用法的比较

transducers.js-JavaScript中的传感器实现

{
  "@@transducer/init": () => {...},
  "@@transducer/result": (result) => {...},
  "@@transducer/step": (result, input) => {...},
}

您可以在此处实现“ @@ /”方法,以符合converters.js转换器协议。如果某个对象符合转换器协议,则它可以与其他符合此协议的对象组合在一起,以便符合另一个协议:converters.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使用“ @@ /”作为常量。它们出现在此路由器的type的导出操作的actions.js字段中。它们用于实现reducer,并导出以与redux和您自己的状态+动作减少器一起使用

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

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

redux也使用“ @@ /”作为常量;每个都用于验证异径管的形状。 ActionTypes.INITcombineReducers getUnexpectedStateShapeWarningMessage中进一步用于有条件地格式化返回的消息。在此pull request中添加了ActionTypes.REPLACE,以在验证减速器形状时处理令人讨厌的警告消息。

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

那里获得了灵感,但他们可能没有一个单一的出身。