跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Go 使用函数类型实现接口的方式,其它语言有类似的实践吗?
未分類
2 10 月 2020

Go 使用函数类型实现接口的方式,其它语言有类似的实践吗?

Go 使用函数类型实现接口的方式,其它语言有类似的实践吗?

資深大佬 : FutherAll 3

试了下 Swift 是不行,因为 Swift 需要显示的继承 protocol 才可以。 Python 可以吗?

大佬有話說 (11)

  • 主 資深大佬 : FutherAll

    像 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)

  • 資深大佬 : geelaw

    请问你说的是 C++ 的 operator ()、C# 的委托、Python 的可调用类型、JavaScript 的 function 吗?

  • 資深大佬 : ciaoly

    Java 设计模式 回调 – 国际版 Bing
    https://www.bing.com/search?q=Java 设计模式+回调

    有点没太理解,主的意思是“用 xxx 语言实现‘回调模式’

  • 資深大佬 : hakono

    主意思是其他语言有没有像 go 那样,对象不用明确声明,只要实现了对应的函数就可以隐式实现接口?

  • 資深大佬 : littlewing

    c++ 的 function object,不过是把 object 当函数用

  • 資深大佬 : reus

    主的意思是,定义一个命名的函数类型,然后给这个类型增加方法,从而实现某个接口

    例如

    type Foo interface { Foo() }

    type Bar func()

    func (b Bar) Foo() {}

    上面的代码,定义了一个名为 Bar,底层类型为 func() 的类型,这就是标题所说的“函数类型”

    这个 Bar 类型还定义了一个 Foo 方法,从而实现 Foo 接口,就是标题所说“使用函数类型实现接口”

    大部分静态语言都做不到给任意的类型命名,更不用说给任意类型增加方法

    Haskell 是可以的,其他不清楚了

  • 資深大佬 : teawithlife

    这叫 duck typing, 比如 python 就支持

  • 主 資深大佬 : FutherAll

    @reus 是的多谢解答,比如 Swift 没办法给 typealias 的函数类型进行 extension 。
    可能是跟方法调用的实现机制相关。我去了解一下 Haskell

  • 主 資深大佬 : FutherAll

    @teawithlife Python 是可以的是吗?我去看一下

  • 主 資深大佬 : FutherAll

    我理解有两个条件:

    1. 对 alias 的类型,是否可以添加方法
    2. 是否可以声明实现某个接口的,或者像 Golang 和 Python 这样的 duck typing

  • 資深大佬 : codehz

    py 这种直接鸭子类型应该可以算可以

    这种效果来说的话,你 c++也可以做 concept 。。。

    以及 typescript 的类型系统也是允许这种情况( js 就不说了,你都不用声明类型)

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具