【发布时间】:2011-03-24 00:50:52
【问题描述】:
我希望在ironpython中加载.net dll。
但是 .net dll 中的静态函数之一,有一些命名和可选参数。
喜欢,绘制(重量:w,高度:h,面积=1)
我只能使用完整的参数吗?
【问题讨论】:
标签: .net ironpython optional-parameters named-parameters
我希望在ironpython中加载.net dll。
但是 .net dll 中的静态函数之一,有一些命名和可选参数。
喜欢,绘制(重量:w,高度:h,面积=1)
我只能使用完整的参数吗?
【问题讨论】:
标签: .net ironpython optional-parameters named-parameters
完全支持命名参数和可选参数。 .NET 长期以来一直支持 VB.NET,因此 IronPython 从一开始就支持相同的方式来实现它们。新的 C# 语法映射到与旧 VB 支持相同的底层元数据。
调用你使用 f(x = 42),它是 Python 的命名参数语法。对于可选参数,您可以将它们排除在外。在您的示例情况下,您可能可以执行 Draw(weight, height) 并将 Area 排除在外。或者您可以将 w/ weight 和 height 作为命名参数调用,并将 Area 省略。
IronPython 查找的底层 .NET 元数据是 OptionalAttribute 或 DefaultParameterValueAttribute。对于可选,我们传入 default(T),除非类型是对象,在这种情况下我们传入 Missing.Value。这通常也与反射调用这些 API 的方式相匹配。
【讨论】:
正如this SO question 所说,IronPython 不支持 .NET 的新命名参数(它使用命名参数来调用它调用的构造函数来设置属性)。
对于可选的,正如this post 所说,
对于可选参数,例如 地址索引器的参数,您 可以使用 Missing.Value 来使用 默认。
当然是from System.Reflection import Missing之后。
【讨论】: