【问题标题】:Does the V language allow to extend base types?V 语言是否允许扩展基本类型?
【发布时间】:2020-10-02 08:27:59
【问题描述】:

在 V 语言中,方法与数据结构是分开定义的。

V 语言是否允许在基本类型上定义方法,例如Array

可以写my_method这样的方法

fn (array Array) my_method() { ... }

list := ["a", "b"]
list.my_method()

【问题讨论】:

  • 我不这么认为......当我尝试它时,我得到了error: cannot define new methods on non-local array_int``。与 Ruby 不同,我想我们不会扩展其他模块的数据结构。

标签: vlang


【解决方案1】:

只有在您自己的模块中才能控制实施 - 我认为没有任何计划支持它。

当它们完全完成后,您可以使用泛型或结构嵌入来做类似的事情。但我怀疑builtin 模块类型是否会支持它。

编辑: (将来也可以用 Sum 类型做一些事情)

【讨论】:

    【解决方案2】:

    除非类型和方法都在同一个模块中定义,否则您不能在类型上定义方法。但是,如果方法和自定义类型都在同一个模块中,您可以在自定义类型的数组上定义方法。例如:

    struct St
    {
        i int
    }
    
    fn (s []St) array_method() {
        println(s[0])
        println(s[1])
    }
    
    arr := [St{3}, St{4}]
    arr.array_method()
    

    【讨论】:

      猜你喜欢
      • 2018-08-24
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多