命名约定“@@/”(斜线)从何而来?
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 使用它们来验证输入。他们可能没有单一的起源,尽管他们可能从 @@
中汲取了灵感
我在许多 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 使用它们来验证输入。他们可能没有单一的起源,尽管他们可能从 @@