type MyData
data
#constructor
function MyData()
data = 1
end
end
myData = MyData()
myData.data #error
我不知道朱莉娅type
是如何运作的。
对我而言type
就像C. {中的struct
一样
所以我不知道为什么我会在那里收到错误:
类型int64没有字段数据
答案 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/