朱莉娅:如何使用类型

时间:2015-11-24 13:35:10

标签: julia

type MyData
    data

  #constructor
  function MyData()
    data = 1
  end
end

myData = MyData()
myData.data #error

我不知道朱莉娅type是如何运作的。

对我而言type就像C. {中的struct一样 所以我不知道为什么我会在那里收到错误:

  

类型int64没有字段数据

2 个答案:

答案 0 :(得分:4)

Julia中的函数返回其中的最后一个表达式。在这种情况下,它是data = 1,返回data而不是MyData的新实例。只需在new(data)之后添加data = 1行即可返回MyData的新实例,它将正常运行。

答案 1 :(得分:1)

通常你想使用一个所谓的“外部构造函数”,即在外部定义的同名函数类型本身的定义。您还希望将每个字段的类型指定为具体类型,例如在此示例中为Int

type MyType
    data::Int
end

这已经自动定义了几个构造函数:

x = MyType(3)
x.data

您可以定义新的外部构造函数,例如有一个默认值:

MyType() = MyType(0)  # defines a new constructor

x = MyType()

您尝试定义的构造函数类型称为“内部构造函数”(因为它位于类型定义中)。当您想要为每个新对象强制使用某些特殊内容时使用它。例如,您可以确保数据必须为正数,如果不是则抛出错误:

type MyType2
    data::Int

    function MyType2(x::Int)
        if x <= 0
            throw(ArgumentError("x must be positive"))
        end

        new(x)
    end
end

x = MyType2(3)
y = MyType2(-17)

您应该查看有关构造函数的文档:

http://docs.julialang.org/en/release-0.4/manual/constructors/