如何定义带有属性的接口?

2024年 2月 11日 91.4k 0

如何定义带有属性的接口?

php小编鱼仔将为大家介绍如何定义带有属性的接口。在PHP中,接口是一种约定,用于定义类应该实现的方法。然而,有时候我们也需要在接口中定义属性。要定义带有属性的接口,我们可以使用常量来模拟属性,并在实现接口的类中进行赋值。这样,我们就可以在接口中定义和使用属性了。接下来,让我们看一下具体的实现方法。

问题内容

我有一个问题:是否可以为线性空间设置接口?

让我提醒一下,在线性空间l中,存在元素相加和元素乘以数字的运算。此外,还满足两个属性:

1)l 中的 a+b

2)l 中的ak,其中 k - 标量

我以以下形式呈现了线性空间的接口:

type Point interface {
}

type LinSpace interface {
Sum(x, y Point)
Prod(x Point, k float64)
}

登录后复制

如何在接口定义中考虑上述两个属性?

解决方法

接口只能包含方法。

你可以这样做:

// effective go says: interface names should contain prefix -er
type linspacer interface {
sum() float64
prod(k float64) float64
}

// struct that implements interface
type linspaceimpl struct {
a float64
b float64
}

// implementation of sum() method
// also, you don't need to pass a and b vars
// because they're already exist in linspaceimpl
func (l *linspaceimpl) sum() float64 {
return l.a + l.b
}

// implementation of prod() method
// unlike the sum() method, here we need extra param - k
// so it has to be passed, or you can add it to
// linspaceimpl as another fields but it doesn't
// make any sense though
func (l *linspaceimpl) prod(k float64) float64 {
return l.a * k
}

// unnecessary "constructor" to optimize your main function
// and clarify code
func newlinspace(a, b float64) linspacer {
// since linspaceimpl correctly implements linspacer interface
// you can return instance of linspaceimpl as linspacer
return &linspaceimpl{
a: a,
b: b,
}
}

登录后复制

然后您可以在主(或其他)函数中执行此操作:

// Use any float values
ls := NewLinSpace(11.2, 24.7)

fmt.Println(ls.Sum()) // 35.9
fmt.Println(ls.Prod(30.2)) // 338.23999999999995

登录后复制

这就是“oop”在 go 中的工作原理。

以上就是如何定义带有属性的接口?的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论