Skip to content

Inheritance of options

本页面总结 Mathematica 选项功能的使用方法。

基本用法

f//Options=
    {"a"->"a1"};

f[opts:OptionsPattern[]]:=
    OptionValue["a"];

f[]

f[{{"a"->"a2","a"->"a3"}}]
Out[]= "a1"

Out[]= "a2"

以下 opts 称为输入选项,Options@f 称为默认选项。

  • 输入选项接受序列和(嵌套)列表 1

  • 输入选项的关键词必须出现在默认选项中。

  • OptionValue 优先搜索输入选项,其次搜索默认选项。

  • 对于输入选项或默认选项,重复的关键词中前面的优先级更高。这与关联的行为相反,例如 <|"a"->1,"a"->2|> 返回 <|"a"->2|>

继承

correct//Options=
    {Splice@Options@f,"b"->"b0"};

wrong//Options=
    {Splice@Options@f,"b"->"b0"};

SetOptions[{correct,wrong},"a"->"a0"];

correct[opts:OptionsPattern[]]:=
    {f@FilterRules[{opts,Options@correct},Options[f]],OptionValue["a"],OptionValue["b"]};

wrong[opts:OptionsPattern[]]:=
    {f@FilterRules[{opts},Options[f]],OptionValue["a"],OptionValue["b"]};

correct[]

wrong[]
Out[]= {"a0","a0","b0"}

Out[]= {"a1","a0","b0"}
  • FilterRules 的两个参数接受(嵌套)列表模式,返回列表。

  • 函数 g1g2 继承了 f 的默认选项,可用 SetOptions 改变默认选项的值。

  • 若改变了默认选项的值,需手动将其传递给 f:用 {opts,Options@g1} 合并 g1 的输入选项与默认选项,用 FilterRules 过滤出 f 接受的选项。否则 f 调用自身的默认选项。

  • 需注意,若 f 接受的参数中含有列表,FilterRules 返回的列表可能会被匹配为列表而非输入选项,消歧义的写法为 sequence@@FilterRules


  1. 接受(嵌套)列表为文档未指明的行为。默认选项也接受(嵌套)列表,在特定场景会报错,不影响功能。