gpt4 book ai didi

function - 如何以编程方式确定函数参数的默认值?

转载 作者:行者123 更新时间:2023-12-03 01:07:25 26 4
gpt4 key购买 nike

考虑以下功能:

function f {param($x = 42)}
$x的默认值为42。假设我有一堆函数,这些函数的参数除其他外,还需要通过编程方式对其默认值进行测试。通过使用以下命令之一返回的对象,我还能发现那些其他东西:
Get-Item function:/f | % Parameters | % x | % Attributes
Get-Help f | % Parameters | % parameter

这些命令输出以下内容:
Position                        : 0
ParameterSetName : __AllParameterSets
Mandatory : False
ValueFromPipeline : False
ValueFromPipelineByPropertyName : False
ValueFromRemainingArguments : False
HelpMessage :
HelpMessageBaseName :
HelpMessageResourceId :
DontShow : False
TypeId : System.Management.Automation.ParameterAttribute

name : x
required : false
pipelineInput : false
isDynamic : false
parameterSetName : (All)
parameterValue : Object
type : @{name=Object}
position : 0
aliases : None

关于默认值似乎没有任何线索。

如何以编程方式确定函数参数的默认值?

最佳答案

您可以使用语法树查找参数的默认值表达式。

function f {
param(
$x = 42,
$y = 6*7,
$z = (Get-Random)
)
}

$Parameters = (Get-Item function:\f).ScriptBlock.Ast.Body.ParamBlock.Parameters
$xDefaultValue = $($Parameters.Where{$_.Name.VariablePath.UserPath -eq 'x'}).DefaultValue
$yDefaultValue = $($Parameters.Where{$_.Name.VariablePath.UserPath -eq 'y'}).DefaultValue
$zDefaultValue = $($Parameters.Where{$_.Name.VariablePath.UserPath -eq 'z'}).DefaultValue

然后,您可以使用语法树节点的 SafeGetValue()方法检索常量值,但不适用于表达式。
$xDefaultValue.SafeGetValue()
$yDefaultValue.SafeGetValue()
$zDefaultValue.SafeGetValue()

关于function - 如何以编程方式确定函数参数的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45662815/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com