Optional

patt:defOptional[patt,def]

是一个模式对象,表示如果省略了形为 patt 的表达式,应使用默认值 def 进行替换.

更多信息

  • Optional 用于在一个由模式表示的函数中指定"可选参数". 模式对象 patt 在如果有参数的情况下,则给出参数应当有的形式. 如果没有参数,表达式 def 给出缺省值来使用.
  • 形式 s_:def 等价于 Optional[s_,def]. 这个形式也等价于 s:_:def. 在这种情况下,由于 s 必须是一个符号,因而没有任何语法歧义. »
  • 特殊形式 s_. 等价于 Optional[s_],可以用于表示函数参数,如果忽略,则应当用它们所在函数指定的全局缺省值替换. »
  • _. 作为 f 的参数,Default[f,] 的值指定所使用缺省值. 在 _. 首次作为 f 的参数出现之前,必须对Default[f,] 赋值. »
  • Optional[s_h] 表示可以忽略的函数,但如果是当前函数,必须有头部 h. 这种情况下没有任何更简单的句法形式. »
  • Optional[s_h,def] 中的值 def 不必具有标头 h. 更广泛地说,默认值不需要匹配实际存在的可选参数的任何模式要求. »
  • 有内置缺省值的函数包括 PlusTimesPower. »
  • LongestShortest 在与 Optional 组合时有特殊含义. Longest[patt:def] 表示首先尝试使用 patt,然后才尝试使用 def. Shortest[patt:def] 则相反,首先尝试使用 def,然后才尝试使用 patt.
  • 如果在使用 Optional 时没有明确说明 LongestShortest,则实际上封装在 Longest 中.

范例

打开所有单元关闭所有单元

基本范例  (1)

定义一个函数,为第二个自变量设定一个默认值:

两个自变量均明确指定的函数:

第二个自变量现在取其默认值:

范围  (5)

在任何模式匹配函数中都可使用 Optional,包括 ReplaceAll

Cases

以及 MatchQ

使用 OptionalBlankSequence

使用的是默认值:

使用给定值:

值的序列赋值 x

Optional 的第一个参数可以为任何模式,而不仅是 Blank 的其中一种形式:

为函数指定一个默认值:

使用默认参数定义一个下值:

如果给出第三个参数,则使用其值:

如果第三个参数不存在,则值取自函数的默认值:

默认值不需要与可选参数的模式匹配:

5 匹配模式:

字符串 "xyz" 不匹配该模式:

当没有指定参数时,即使默认值不能匹配模式,也将返回默认值:

属性和关系  (6)

三元形式 sym:pat:def 的头部为 Optional

形式 s_:ds:_:d 恒等:

如果没有给出明确的默认值,则从头部的 DefaultValues 中推断出默认值:

1 来自 DefaultValues[Times]

始终可以提供一个明确的默认值:

缩写形式 x_. 等价于 Optional[Pattern[x,Blank[]]

当限制一个默认参数时,模式将完全无法匹配一个不符合要求的参数:

只有当参数完全缺失时,才会使用默认值:

Optional 不会阻止默认值的计算:

因此,所有调用 f 都使用相同的默认值:

使用 HoldPattern 将默认值的计算延迟到其被使用时:

g 的每次调用都使用一个唯一的默认值:

使用 BlankSequenceOptional 定义一个函数;该函数使用默认值进行计算:

使用 BlankNullSequence 定义一个函数;该函数在计算时不使用任何值:

由于 BlankNullSequence 匹配的参数长度为零,所以 x___:d 形式永远不会使用 d

可能存在的问题  (3)

只有当 sBlank[]Pattern[sym,Blank[]] 的特殊输入形式时,输入 s:v 才有头部 Optional

也允许 BlankSequence[]BlankNullSequence[]

如果 s 是一个符号,那么 s:v 代表 Pattern[s,v]

如果 s 是任何其他的表达式,那么该形式就不是有效输入:

ConditionPatternTest 不能应用于 Optional

取而代之的是,对 Optional 的第一个参数应用该检验:

无论给定的参数是零还是一个,函数 fg 的行为都符合期望:

Pattern 不能绑定到一个 Optional 对象:

取而代之的是,把模式放在 Optional 的第一个参数里面:

如果模式不匹配,符号 x 被赋予默认值:

注意,Optional 对象可以用三元形式 s:p:d 写得更简洁:

Wolfram Research (1988),Optional,Wolfram 语言函数,https://reference.wolfram.com/language/ref/Optional.html (更新于 2015 年).

文本

Wolfram Research (1988),Optional,Wolfram 语言函数,https://reference.wolfram.com/language/ref/Optional.html (更新于 2015 年).

CMS

Wolfram 语言. 1988. "Optional." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2015. https://reference.wolfram.com/language/ref/Optional.html.

APA

Wolfram 语言. (1988). Optional. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/Optional.html 年

BibTeX

@misc{reference.wolfram_2024_optional, author="Wolfram Research", title="{Optional}", year="2015", howpublished="\url{https://reference.wolfram.com/language/ref/Optional.html}", note=[Accessed: 22-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_optional, organization={Wolfram Research}, title={Optional}, year={2015}, url={https://reference.wolfram.com/language/ref/Optional.html}, note=[Accessed: 22-November-2024 ]}