2015-01-31 70 views
6

Đi hỗ trợ lồng nhau struct bên trong chức năng nhưng không có chức năng lồng nhau ngoại trừ lambda, không có nghĩa là không có cách nào để xác định một lớp lồng nhau bên trong chức năng?Golang lồng nhau lớp bên trong chức năng

func f() { 
    // nested struct Cls inside f 
    type Cls struct { 
    ... 
    } 
    // try bounding foo to Cls but fail 
    func (c *Cls) foo() { 
    ... 
    } 
} 

Do đó, cảm thấy hơi lạ khi lớp đang yếu đi bên trong hàm.

Bất kỳ gợi ý nào?

+3

'struct' là loại cấu trúc. Go không có lớp học. – icza

+0

@icza xin lỗi 'class' ở trên có nghĩa là' struct' với hàm bounding. Tha thứ cho biểu hiện sai của tôi. –

+0

Vâng, tôi hiểu, tôi vừa sửa lại thuật ngữ hoặc thuật ngữ. – icza

Trả lời

7

Trên thực tế nó không quan trọng nếu bạn muốn khai báo hàm với hoặc mà không một máy thu: chức năng làm tổ tại Gò không được phép.

Mặc dù bạn có thể sử dụng Function literals để đạt được một cái gì đó như thế này:

func f() { 
    foo := func(s string) { 
     fmt.Println(s) 
    } 

    foo("Hello World!") 
} 

Ở đây chúng ta tạo ra một biến foo trong đó có một loại chức năng và nó được delcared bên trong một chức năng f. Gọi chức năng "bên ngoài" f kết quả đầu ra: "Hello World!" như mong đợi.

Thử trên Go Playground.

+0

ok ~ và có cách nào để liên kết một hàm Hàm với 'struct' lồng nhau không? –

+0

@HayesPan Không, bạn không thể. Không theo ý nghĩa tạo phương thức cho loại. Bạn có thể chỉ định một tham số bổ sung cho hàm chức năng mà sẽ là kiểu 'struct' giống như bộ thu, nhưng nó sẽ không là một phần của tập hợp phương thức' struct'. _Function literal_ không phải là _function_, nó chỉ là _value_ (có kiểu hàm). – icza

+0

đã nhận nó√ Cảm ơn! @icza –

Các vấn đề liên quan