Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk menentukan antara muka dengan sifat?

Bagaimana untuk menentukan antara muka dengan sifat?

PHPz
PHPzke hadapan
2024-02-10 22:30:09709semak imbas

Bagaimana untuk menentukan antara muka dengan sifat?

editor php Yuzai akan memperkenalkan kepada anda cara untuk menentukan antara muka dengan atribut. Dalam PHP, antara muka ialah konvensyen yang mentakrifkan kaedah yang harus dilaksanakan oleh kelas. Walau bagaimanapun, kadangkala kita juga perlu menentukan sifat dalam antara muka. Untuk menentukan antara muka dengan sifat, kita boleh menggunakan pemalar untuk mensimulasikan sifat dan memberikan nilai dalam kelas yang melaksanakan antara muka. Dengan cara ini, kita boleh menentukan dan menggunakan sifat dalam antara muka. Seterusnya, mari kita lihat kaedah pelaksanaan khusus.

Kandungan soalan

Saya ada soalan: adakah mungkin untuk menyediakan antara muka untuk ruang linear?

Izinkan saya mengingatkan anda bahawa dalam ruang linear l, terdapat operasi menambah unsur dan mendarab unsur dengan nombor. Selain itu, ia juga memenuhi dua sifat:

1) a+b dalam l

2) ak dalam l, di mana k - skalar

Saya membentangkan antara muka untuk ruang linear dalam bentuk berikut:

type Point interface {
}

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

Bagaimana untuk mempertimbangkan dua sifat di atas dalam definisi antara muka?

Penyelesaian

Antara muka hanya boleh mengandungi kaedah.

Anda boleh melakukan ini:

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

Anda kemudian boleh melakukan ini dalam fungsi utama anda (atau yang lain):

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

Beginilah cara "oop" berfungsi.

Atas ialah kandungan terperinci Bagaimana untuk menentukan antara muka dengan sifat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam