“@@/”(at-at-slash)命名约定的起源是什么?

6

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


5
在ES6 JavaScript中,“@@”(“at at”)表示Symbol.species属性。 - FirstOne
也许可以用一个简单的符号来代替,一旦符号可用就立即更换? - MinusFour
@FirstOne 看起来很相似,但我觉得目的不同。在ES6规范中,它只是一种简短的表示“Symbol”的方式。而在我给出的例子中,它可能会产生运行时影响(例如避免库之间的名称冲突)。 - Ricardo Stuven
类变量,方法等。https://dev59.com/DW025IYBdhLWcg3wpHl- - Vitaliy Terziev
可能是[ES6 JavaScript中的@@(“at at”)是什么意思?]的重复问题。 - Paul Sweatte
1个回答

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和您自己的状态+操作reducers一起使用。
redux - 管理JavaScript应用程序的状态。
const ActionTypes = {
  INIT: `@@redux/INIT${randomString()}`,
  REPLACE: `@@redux/REPLACE${randomString()}`,
  PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`
}

redux使用"@ @ /"作为常量,用于验证reducer的形状。 ActionTypes.INIT 还在combineReducersgetUnexpectedStateShapeWarningMessage中进一步使用,以有条件地格式化返回的消息。 ActionTypes.REPLACE 在此pull request中添加以处理验证reducer形状时的恼人警告消息。

简而言之,这些都是"@ @ /"的不同用例。transducers.js使用它们来实现其转换器协议,routex使用它们作为常量,redux使用它们验证输入。它们可能没有单一起源,尽管它们可能受到 @@ 的启发。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接