我写了一个惰性代码来演示我必须实现接口的问题。我有方法M1,M2,它们将struct X作为参数,并且具有类型structY。我希望所有这些方法都可以通过一个接口I实现。问题是实现接口的方法M我需要知道必须传递给子方法(M1,M2)的参数。我在M中传递多个参数时收到错误消息:New-Variable -Name 'ssfBITBUCKET' -Option Constant -Value 0x0A;
$application = New-Object -ComObject 'Shell.Application';
$bitBucket = $application.NameSpace($ssfBITBUCKET);
for ($column = 0; -not [String]::IsNullOrEmpty(($details = $bitbucket.GetDetailsOf($null, $column))); $column++)
{
New-Object -TypeName 'PSObject' -Property @{
Column = $column;
Name = $details;
};
}
Column Name
------ ----
0 Name
1 Original Location
2 Date Deleted
3 Size
4 Item type
5 Date modified
6 Date created
7 Date accessed
8 Attributes
...
答案 0 :(得分:3)
在您的示例中导致<argument name> used as a value
错误的问题是声明构成接口I
的函数没有返回值:
type I interface {
M1(x X)
M2(x X)
}
如果函数未返回任何内容:Println
,那么您当然不能将函数调用作为fmt.println(i.M1(x))
的参数传递。更改示例中的接口声明以返回某些内容(以及其他一些修复*):
type Y struct {
a int
}
type X struct {
a int
}
func(y *Y) M1(x X) int {
return y.a+x.a
}
func(y *Y) M2(x X) int {
return y.a*x.a
}
type I interface {
M1(x X) int
M2(x X) int
}
func M(i I, x X) {
fmt.Println(i.M1(x))
fmt.Println(i.M2(x))
}
*)更改M1
和M2
以返回int
而不是struct
并修复使用接收方进行函数声明的语法