以下表达式将生成一个上下文名称,保证不会与任何加载的上下文冲突:
First@Contexts[] //.
c_ /; MemberQ[Contexts[], c] :>
"Context"~~ToString[RandomInteger[1000000]]~~"`"
Run Code Online (Sandbox Code Playgroud)
它不会尝试考虑尚未加载的上下文.如上所述,在用尽名称之前,此表达式最多可使用1,000,000次.调整固定字符串("上下文")和名称计数(1000000)以适合您的口味.
更新
正如@Leonid在评论中指出的那样,空的上下文不会被列入Contexts[].因此,严格地说,该表达式可能返回现有空上下文的名称.
的UUID
出于所有实际目的,从足够大的范围中随机选择的数字生成名称将起作用,例如
"Context"~~ToString[RandomInteger[2^128]]~~"`"
Run Code Online (Sandbox Code Playgroud)
类似地,可以使用UUID.UUID通常用作标识符,这些标识符在所有网络节点上也非常可能是唯一的:
Needs["JLink`"]
LoadJavaClass["java.util.UUID"]
"Context"~~
StringReplace[JavaBlock@java`util`UUID`randomUUID[]@toString[], "-" -> ""]~~
"`"
Run Code Online (Sandbox Code Playgroud)
我可以建议我在这里使用的函数:
Clear[unique];
unique[sym_] :=
ToExpression[
ToString[Unique[sym]] <>
StringReplace[StringJoin[ToString /@ Date[]], "." :> ""]];
Run Code Online (Sandbox Code Playgroud)
您可以替换 ToExpression通过StringJoin[...,"`"]调整使其适合于您的需求.
| 归档时间: |
|
| 查看次数: |
387 次 |
| 最近记录: |