Julia:构造函数在函数中嵌入函数

时间:2014-11-07 11:59:56

标签: oop julia

我是OOP的新手。假设我有类似的类型和功能:

   type Person
      name::String
      male::Bool
      age::Float64
      children::Int

    end

    function describe(p::Person)
      println("Name: ", p.name, " Male: ", p.male)
      println("Age: ", p.age, " Children: ", p.children)
    end


    ted = Person("Ted",1,55,0)

    describe(ted)

有没有办法将describe函数嵌入到类型中。例如,如果我输入这样的东西

ted.describe()

我会得到:

Name Ted Male true
Age 55.0 Children 0

2 个答案:

答案 0 :(得分:4)

我也是朱莉娅的新手,并且很久以前也有同样的要求。

现在我用以下代码解决您的问题, 感谢你的帮助 Understanding object-oriented programming in Julia – Objects-part 1

我知道一个匿名的功能不是很快,但我 认为开销对于“打印”功能来说并不算太糟糕。

#!/usr/bin/env julia
mutable struct Person
    name::AbstractString
    male::Bool
    age::Float64
    children::Int
    describe::Function
    function Person(name,male,age,children)
        this = new()
        this.name = name
        this.male = male
        this.age = age
        this.children = children
        # anonymous functions are not known to be fast ;-)
        this.describe =  function() describe(this) end
        this
    end
end

function describe(p::Person)
    println("Name: ", p.name, " Male: ", p.male)
    println("Age: ", p.age, " Children: ", p.children)
end

ted = Person("Ted",1,55,0)
# describe(ted)
ted.describe()

然而,正如0xMB所说:这不是朱莉娅的方式。 但是我喜欢用Ruby链接调用系统的方法, 因此,我希望有一天会出现一个语法学问题 轻松创建一些别名来创建这样的“成员函数”。

- 莫里斯

答案 1 :(得分:3)

朱莉娅不支持这种点符号。这可能不同于其他面向对象的语言,其中方法是对象的一部分,但Julia函数被认为通常对数据起作用,因此不在对象数据中定义。

你的例子很好。