Home >Backend Development >Golang >How to define an interface with properties?

How to define an interface with properties?

PHPz
PHPzforward
2024-02-10 22:30:09709browse

How to define an interface with properties?

php editor Yuzai will introduce to you how to define an interface with attributes. In PHP, an interface is a convention that defines the methods a class should implement. However, sometimes we also need to define properties in the interface. To define an interface with properties, we can use constants to simulate properties and assign values ​​in the class that implements the interface. In this way, we can define and use properties in the interface. Next, let's take a look at the specific implementation method.

Question content

I have a question: Is it possible to set an interface for a linear space?

Let me remind you that in linear space l, there are operations of adding elements and multiplying elements by numbers. In addition, two properties are also satisfied:

1) a b in

l

2)l in ak, where k - scalar

I present the interface for linear space in the following form:

type Point interface {
}

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

How to consider the above two properties in the interface definition?

Solution

Interfaces can only contain methods.

You can do this:

// 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,
        }
    }

You can then do this in your main (or other) function:

// Use any float values
    ls := NewLinSpace(11.2, 24.7)
    
    fmt.Println(ls.Sum())      // 35.9
    fmt.Println(ls.Prod(30.2)) // 338.23999999999995

This is how "oop" works in go.

The above is the detailed content of How to define an interface with properties?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete