【问题标题】:Where does the naming convention "@@/" (at-at-slash) come from?命名约定“@@/”(at-at-slash)从何而来?
【发布时间】:2016-01-03 19:34:48
【问题描述】:

我在许多 JavaScript 库中都看到了它(例如,transducers-jsroutexredux)。我猜这是命名空间的一种形式,但我在任何地方都找不到解释或至少是评论。

【问题讨论】:

标签: javascript naming-conventions conventions


【解决方案1】:

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

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

"@@/" 并不是众所周知的符号,因为它们是字符串;它们也不是该问题中引用的规范的一部分。 “@@/”确实类似于众所周知的符号@@,因为它们都影响特定于域的行为。 @@ 的域是“所有代码领域”==“JavaScript 环境的所有实例”== 几乎所有内容。 “@@/”的域是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 以有条件地格式化返回的消息。在此 pull request 中添加了 ActionTypes.REPLACE 以在验证减速器形状时处理烦人的警告消息。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多