美文网首页
GO语言中的interface在ruby里面是个什么概念

GO语言中的interface在ruby里面是个什么概念

作者: 33d8e4ec2cc9 | 来源:发表于2017-06-26 17:43 被阅读21次

最近有稍微关注一下GO语言,在看到interface这块的时候有点小晕

package main

import (
    "fmt"
    "math"
)

type Abser interface {
    Abs() float64
}

func main() {
    var a Abser
    f := MyFloat(-math.Sqrt2)
    v := Vertex{3, 4}

    a = f  // a MyFloat 实现了 Abser
    a = &v // a *Vertex 实现了 Abser

    fmt.Println(a.Abs())
}

type MyFloat float64

func (f MyFloat) Abs() float64 {
    if f < 0 {
        return float64(-f)
    }
    return float64(f)
}

type Vertex struct {
    X, Y float64
}

func (v *Vertex) Abs() float64 {
    return math.Sqrt(v.X*v.X + v.Y*v.Y)
}

后面去论坛问了一些大神,说你只要知道ruby里面的duck type,就能搞懂这是怎么回事,于是我去回顾了一下ruby里duck type(多态)的定义

一个对象只要它像鸭子一样走路,像鸭子一样嘎嘎叫,那么解释器会很高兴的把它当做鸭子来对待的

什么意思?

class A
  def hello
     'it works'
  end
end

class B
  def  hello
    'it works2'
  end
end

[A, B].each do |klass|
  ins = klass.new
  ins.hello
end

举个再常用一点的例子,一个数组里面有一个整数型,一个浮点数型,你对他们分别进行to_s, 都可以实现变成字符串

不得不感叹ruby语法的强大,对比其他语言的实现(c++中的纯虚函数,go里面的interface),ruby多态的实现是如此优雅!

我们接下来还是回到这段go语法中来解释一下interface的概念

Interface定义了一个或一组method(s),这些method(s)只有函数签名,没有具体的实现代码。若某个数据类型实现了Interface中定义的那些被称为"methods"的函数,则称这些数据类型实现(implement)了interface

代码中一开始定义了一个interface, 里面只有一个函数签名,并不需要实现这个函数

MyFloat和Vertex你可以理解为2个类(GO里面没有类,但是可以定义struct),这两个类都包含了Abs()方法,因此这两个类的对象(姑且称之为对象吧),都达到了Abser()这个接口的条件,实现了多态, 至于多态带来来的好处,这次就先不说了。

相关文章

  • GO语言中的interface在ruby里面是个什么概念

    最近有稍微关注一下GO语言,在看到interface这块的时候有点小晕 后面去论坛问了一些大神,说你只要知道rub...

  • Go语言之Interface(一)

    Go语言之Interface(一) 什么是interface 在面向对象语言中接口是:接口定义了一个对象的行为,但...

  • Go语言之Interface(一)

    Go语言之Interface(一) 什么是interface 在面向对象语言中接口是:接口定义了一个对象的行为,但...

  • 什么是Go语言中的interface

    Interface(接口)在Go语言中就是一系列的函数原型(function signature),例如: 每个实...

  • Go并发

    Go语言中的并发编程 并发是编程里面一个非常重要的概念,Go语言在语言层面天生支持并发,这也是Go语言流行的一个很...

  • Ruby中的Module

    Ruby中没有Java语言中的interface,Ruby只支持单继承。Ruby通过Mix-in提供对类的扩展,其...

  • Golang中的Interface(接口),全面解析

    Go语言中的interface没有强制要求实现方法,但是interface是go中非常强大的工具之一。任一类型都可...

  • Golang笔记-浅谈interface

    前言 class和interface在高级语言中是很重要的概念。class是对模型的定义和封装,interface...

  • Go的内存管理

    本文翻译自Memory Management in Go,介绍了Go语言中内存管理的相关概念。 所有的计算机程序语...

  • interface in go

    interface是go语言定义的一种类型,通常用于定义一些方法的集合。但是在go语言里面,interface又与...

网友评论

      本文标题:GO语言中的interface在ruby里面是个什么概念

      本文链接:https://www.haomeiwen.com/subject/qjyjcxtx.html