- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的笔记本中有类似以下内容。
test1[g_] := (g == 5);
test2[g_] := (g == 6);
tests={"test1", "test2"}
ToExpression[#][5] & /@ tests
当我将此代码放入包中时,它不起作用,因为 test1
现在称为 MyPackage'Private'test1
。如何修改最后一行以使此代码在包内和笔记本内运行?
更新这就是为什么我使用 ToExpression 而不是使用 Symbols 的原因。回想起来,也许改用符号更容易
我有一个函数,我称之为 getGraphs["LeafFree","Planar",!"Tree",...]
来获取所有无叶、平面而不是树的图形.其中一些字符串是 GraphData
中的类,而另一些是我自己的类。对于我自己的每个类,我都有一个名称相同的函数,例如测试属性的 LeafFree
。在 notebook 中,使用上述 ToExpression
代码是实现这一点的最快方法。
getGraphs[n_Integer, cl__] := getGraphs[{n, n}, cl];
getGraphs[{nmin_Integer, nmax_Integer}, cl__] :=
Module[{maxgraphnum = 100},
customClasses = {"isLeafFree", ! "isLeafFree"};
classes = {cl}\[Backslash]customClasses;
builtinClasses =
GraphData["Classes"] \[Tilde] (Not /@ GraphData["Classes"]);
Assert[classes \[Subset] builtinClasses];
isLeafFree[gname_] :=
FreeQ[GraphData[gname, "DegreeSequence"], 0 | 1];
posClasses = Cases[classes\[Backslash]customClasses, _String];
posGroup =
If[posClasses == {}, GraphData[nmin ;; nmax],
GraphData[posClasses, nmin ;; nmax]];
negClasses = classes\[Backslash]posClasses;
negGroups = GraphData[#[[1]], nmin ;; nmax] & /@ negClasses;
result = Complement[posGroup, Sequence @@ negGroups];
customTest[g_] :=
And @@ (ToExpression[#][g] & /@ ({cl} \[Intersection]
customClasses));
(*result=Take[result,Min[Length[result],100]];*)
result = Select[result, customTest]
]
最佳答案
我同意上面的评论,您可能应该有一个令人信服的理由这样做,但这里就是这样。这是我在这种情况下使用的代码,它允许在运行时在任何你喜欢的上下文中解析你的符号:
SetAttributes[ParseTimeNameSpaceWrapper,HoldFirst];
Options[ParseTimeNameSpaceWrapper] = {
LocalizingContext->"MyLocalizingContext`",
DefaultImportedContexts:>{"Imported1`", "Imported2`"},
ExtraImportedContexts:> {}
};
ParseTimeNameSpaceWrapper[code_,opts:OptionsPattern[]]:=
Module[{result,
context = OptionValue[LocalizingContext],
defcontexts = OptionValue[DefaultImportedContexts],
extraContexts = OptionValue[ExtraImportedContexts],
allContexts},
allContexts = {Sequence@@defcontexts,Sequence@@extraContexts};
BeginPackage[context,If[allContexts==={},Sequence@@{},allContexts]];
result = code;
EndPackage[];
result
];
您可以使用选项来指定存在这些符号的一些上下文,您希望在解析阶段导入这些上下文。您可以从任何包或笔记本中调用它,符号将根据您指定的任何上下文进行解析。
HTH
编辑:
回复评论(因为它使问题更具体):毫无疑问,在运行时 Context[]
将显示调用函数的当前上下文(在这种情况下是全局的)。我的意思是别的:Context
有一个语法 Context[symbol]
,如果它在 $ContextPath
上,它可以给出任何符号的上下文。例如,Context[getGraphs]
返回 Bulatov'showGraphs'
。因此,如果您需要自动确定某个导出函数的上下文,则调用Context[function]
。您可以使用它来构造该包的其他(私有(private))函数的全名。这是一个独立的例子:
In[1]:=
BeginPackage["MyTest`"];
f[x_, y_, context_: Context[f]] :=
Module[{f1str = "function1", f2str = "function2", f1, f2},
{f1, f2} = ToExpression[context <> "Private`" <> #] & /@ {f1str, f2str};
f1[x, y];
f2[x, y];];
Begin["`Private`"];
function1[x_, y_] := Print["In function1: arguments are ", x, " , ", y];
function2[x_, y_] := Print["In function2: arguments are ", x, " , ", y];
End[]
EndPackage[];
Out[6]= "MyTest`Private`"
In[8]:= f[1, 2]
During evaluation of In[8]:= In function1: arguments are 1 , 2
During evaluation of In[8]:= In function2: arguments are 1 , 2
其中 x,y
只是一些示例参数。然后,您实际上永远不会提供最后一个参数,但您可以在函数中使用 context
变量来为其他函数构造长名称,如上面的示例代码所示。或者你可以在函数体中直接使用 Context[f] ,而不给它添加任何参数。
关于wolfram-mathematica - 从包中获取当前上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4824861/
我记得 WRI 的某个人在 official newsgroup 中说出于兼容性目的,Mathematica 7 仍然有一个来自 Mathematica 5 的老式 Mathematica 帮助浏览器
除非巫师先生在度假,否则很难击败这种似乎具有无所不在和无所不知的现象。我们如何使用 Mathematica 和 StackOverflow API 超越他? 最佳答案 这是 Sjoerd 解决方案的一
您好,我无法理解以下函数的输出。 ListPointPlot3D[Table[Sin[x^2 + y], {x, 0, 3, 0.15}, {y, 0, 3
我在图形中显示了一组点: alt text http://img69.imageshack.us/img69/874/plc1k1lrqynuyshgrdegvfy.jpg 我想知道是否有任何命令可以
让 S是具有唯一元素的向量,并且 s它的一个子集,也有独特的元素;例如,S={1,2,3,4,5,6}和 s={1,3,4,6} .现在给出另一个向量 c={7,8,9,7} ,如何创建矢量 C=[7
我想知道如果给定多个替换规则,mma 如何确定在发生碰撞时首先应用哪个规则。一个例子是: x^3 + x^2*s + x^3*s^2 + s x /. {x -> 0, x^_?OddQ -> 2}
在mathematica 中(我使用的是 mma 5.0(猜猜很老)),如果我将以下内容作为一行输入: Needs["Graphics`Master`"]; Animate[Plot[Sin[n x]
如果我有一个字母表,假设 sigma = {1,2,3,4,a,b,c,d,e,f,g} 并且想要生成所有长度为 n 的单词,有没有办法做到这一点? 我可以做 Flatten[Outer[Functi
生成参数列表的素数列表的最简单函数是什么?想出这样的函数并不难,比如: foo[n_] := Block[{A = {}, p = 2}, While[p All] 关于wol
在此示例中,将函数定义为“functionB”时,这是一个奇怪的结果。有人可以解释吗?我想绘制functionB[x]和functionB[Sqrt[x]],它们必须不同,但是此代码显示functio
如何在 Mathematica 中对列表进行数值微分而不先将其拟合为数学表达式(即使用 FindFit )? 具体来说,我想在列表中找到最大斜率的点。 我已经考虑使用 Differences并找到最大
我正在寻找 Mathematica 中原子对象的完整列表(其中 AtomQ 产生 True)。 我知道 Symbol String Integer Real Rational Complex Spar
最近发现了一些old post在 MathGroup 上使用未记录的命令行选项 -batchinput和 -batchoutput显示: If test.mma contains the follo
Mathematica 似乎缺少此功能,或者无论如何我都找不到它。 Series function 可以对多个变量进行连续扩展,但它似乎无法进行完整的多元扩展。 有谁知道如何做到这一点? 谢谢 最佳答
我有兴趣运行相同的函数,该函数以并行方式在多核上使用不同的参数值进行一些蒙特卡罗评估。我还想确保整个函数在同一个内核上运行,而函数内的计算不会跨内核分布。例如,假设我有一个函数(故意简化) f[a_,
我怎样才能从 Range[96] 中不重复地获得 48 个随机对的两个不同元素?即 96 个元素只使用一次。 当我尝试将元组/子集与 Select 结合使用时,我觉得必须有一种更直接的方法来实现这一点
我正在评估 Wolfram Mathematica 8 的大学类(class)项目。 我很难定义目标编程模型。 首先是因为我在数学方面真的很匮乏 :) 其次,因为我在 official documen
我开发了一些代码来从 LogNormalDistribution 和 StableDistribution 的乘积生成随机变量: LNStableRV[{\[Alpha]_, \[Beta]_, \[
我有一个想要优化的字符串验证函数。该字符串的长度为 2n,由 0 和 1 组成,例如 str="100001"。我想测试一下: 1) 字符串中奇数索引位置的 1 的数量(必须不少于 1)是否等于偶数索
请考虑: Function[subID, pointSO[subID] = RandomInteger[{1, 4}, {5, 2}]] /@ {"subA", "subB"}; M
我是一名优秀的程序员,十分优秀!