Wolfram mathematica 函数在笔记本中工作,但不作为包的一部分-有关函数参数的消息受到保护
在笔记本中计算时,以下代码有效:Wolfram mathematica 函数在笔记本中工作,但不作为包的一部分-有关函数参数的消息受到保护,wolfram-mathematica,Wolfram Mathematica,在笔记本中计算时,以下代码有效: Person[name_String, age_Integer] := {name, age}; Person["Jane", 30] name = "Dick"; age = 28; Person[name, age] 输出 {"Jane", 30} {"Dick", 28} 所以我把它放在下面的包中: 人 Person.nb 输出 我不明白为什么会有一个使用名称和年龄符号的保护问题。这个人的论点“姓名”和“年龄”也受到保护吗 celtschk的回答让我
Person[name_String, age_Integer] := {name, age};
Person["Jane", 30]
name = "Dick";
age = 28;
Person[name, age]
输出
{"Jane", 30}
{"Dick", 28}
所以我把它放在下面的包中:
人
Person.nb
输出
我不明白为什么会有一个使用名称和年龄符号的保护问题。这个人的论点“姓名”和“年龄”也受到保护吗
celtschk的回答让我看到了光明。以下内容不公开姓名和年龄:
BeginPackage["Person`"]
Unprotect @@ Names["Person`*"];
ClearAll @@ Names["Person`*"];
Person::usage = "Person";
Begin["`Private`"]
Person[name_String, age_Integer] := {name, age};
End[]
Protect @@ Names["Person`*"];
EndPackage[]
因为当您定义函数
Person
时,当前的上下文是Person`
,所有新的标识符都在那里创建,甚至标识符name
和age
(您以前没有创建它们,因此它们是在该点创建的)。然后保护上下文Person`
中的所有内容,包括这两个符号。当您尝试分配给它们时,Mathematica正确地抱怨它们受到保护。有人知道如何在内联引用的材料中包含反勾号吗?(上下文名称)谢谢您的解释。我知道如何解决这一问题Person[name\u String,age\u Integer]:={name,age};'在“开始[”Private
“]”和“结束[]”之间,通过“::用法”将其公开,然后不公开“名称”和“年龄”。@celtschk请参阅我的编辑,了解如何输入上下文以显示记号。
Needs["Person`"];
Person["Jane", 30]
name = "Dick";
age = 28;
Person[name, age]
name1 = "Bill";
age1 = 40;
Person[name1, age1]
{"Jane", 30}
Set::wrsym: Symbol name is Protected. >>
Set::wrsym: Symbol age is Protected. >>
Person[name, age]
{"Bill", 40}
BeginPackage["Person`"]
Unprotect @@ Names["Person`*"];
ClearAll @@ Names["Person`*"];
Person::usage = "Person";
Begin["`Private`"]
Person[name_String, age_Integer] := {name, age};
End[]
Protect @@ Names["Person`*"];
EndPackage[]