Golang Go语言中使用函数类型实现接口的方式,其它语言有类似的实践吗?
Golang Go语言中使用函数类型实现接口的方式,其它语言有类似的实践吗?
试了下 Swift 是不行,因为 Swift 需要显示的继承 protocol 才可以。 Python 可以吗?
像 Go 的 http 的标准库 HandlerFunc 实现 Handler 接口这样
![go.png]( https://s1.ax1x.com/2020/10/04/0Gai59.png)
Swift 好像没办法这样写的
![swift.png]( https://s1.ax1x.com/2020/10/04/0GakCR.png)
更多关于Golang Go语言中使用函数类型实现接口的方式,其它语言有类似的实践吗?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
请问你说的是 C++ 的 operator ()、C# 的委托、Python 的可调用类型、JavaScript 的 function 吗?
Java 设计模式 回调 - 国际版 Bing
https://www.bing.com/search?q=Java 设计模式+回调
有点没太理解,楼主的意思是“用 xxx 语言实现‘回调模式’🐴”?
楼主意思是其他语言有没有像 go 那样,对象不用明确声明,只要实现了对应的函数就可以隐式实现接口?
c++ 的 function object,不过是把 object 当函数用
楼主的意思是,定义一个命名的函数类型,然后给这个类型增加方法,从而实现某个接口
例如
type Foo interface { Foo() }
type Bar func()
func (b Bar) Foo() {}
上面的代码,定义了一个名为 Bar,底层类型为 func() 的类型,这就是标题所说的“函数类型”
这个 Bar 类型还定义了一个 Foo 方法,从而实现 Foo 接口,就是标题所说“使用函数类型实现接口”
大部分静态语言都做不到给任意的类型命名,更不用说给任意类型增加方法
Haskell 是可以的,其他不清楚了
这叫 duck typing, 比如 python 就支持
是的多谢解答,比如 Swift 没办法给 typealias 的函数类型进行 extension 。
可能是跟方法调用的实现机制相关。我去了解一下 Haskell
Python 是可以的是吗?我去看一下
我理解有两个条件:
1. 对 alias 的类型,是否可以添加方法
2. 是否可以声明实现某个接口的,或者像 Golang 和 Python 这样的 duck typing
py 这种直接鸭子类型应该可以算可以
这种效果来说的话,你 c++也可以做 concept 。。。
以及 typescript 的类型系统也是允许这种情况( js 就不说了,你都不用声明类型)
在Golang(Go语言)中,使用函数类型实现接口是一种灵活且强大的特性,它允许将函数作为接口的实现,增强了代码的模块化和复用性。这种实践在其他编程语言中也有类似的体现,尽管具体语法和实现方式可能有所不同。
例如,在Java中,虽然传统上接口不能直接由函数实现,但可以通过使用函数式接口(Functional Interface)和Lambda表达式来模拟类似的效果。函数式接口是指只包含一个抽象方法的接口,允许使用Lambda表达式简洁地实现该接口。
Python则更加直接地支持这种函数作为接口实现的概念。在Python中,由于其动态类型和鸭子类型(duck typing)的特性,任何符合接口方法的对象(包括函数)都可以被视为实现了该接口,无需显式声明。
JavaScript(特别是ES6及以后版本)也引入了箭头函数和默认接口实现等特性,使得函数可以作为对象的方法,并在一定程度上模拟接口的实现。
虽然这些语言在语法和实现细节上有所不同,但它们都提供了将函数作为接口实现或类似功能的机制,旨在提高代码的灵活性和可维护性。Go语言的这一特性在保持类型安全的同时,也提供了强大的抽象能力,使得开发者能够编写出更加模块化和易于测试的代码。