Object 如何在Julia对象中声明变量的类型?
如何在Julia中的对象的构造函数中声明一个简约类型的变量?作为一个例子,考虑如下:Object 如何在Julia对象中声明变量的类型?,object,types,julia,declaration,Object,Types,Julia,Declaration,如何在Julia中的对象的构造函数中声明一个简约类型的变量?作为一个例子,考虑如下: type DetermineType foobar::Base.Prod2{LinSpace{Float64},LinSpace{Float64}} end function DetermineType(;foo = linspace(0, 1, 10), bar = linspace(0, 1, 10)) foobar = Base.product(foo, bar)
type DetermineType
foobar::Base.Prod2{LinSpace{Float64},LinSpace{Float64}}
end
function DetermineType(;foo = linspace(0, 1, 10),
bar = linspace(0, 1, 10))
foobar = Base.product(foo, bar)
return DetermineType(foobar)
end
foobar
的声明是Base.Prod2{LinSpace{Float64},LinSpace{Float64}
。我决定使用这个类型,因为它是typeof(foobar)
的输出。虽然此声明还不太长,但包含两个以上Linspace
对象的Base.product
很快就会变得非常冗长。在阅读了Julia关于的文档之后,我想我正在寻找foobar
的supertype
。然而,我不知道如何获得它。有人能帮忙吗
Supertype
访问Supertype。在本例中,supertype(typeof(foobar))
是一个Base.Iterators.AbstractProdIterator
李>
foobar::Base.Iterators.Prod2
为什么不在没有限制的情况下对其进行参数化呢?当试图为某些类型提供特定的性能版本时,限制参数类型通常是很好的。使用命名参数目前(0.5/0.6版)可能会带来性能“挑战”,因此最好避免在热代码中使用。只需在类型中快速地对其进行参数化而不受限制,就可以编写:
type DetermineType{T}foobar::T end
@lyndoweight您能简要介绍一下{T}
的含义吗?我在中多次看到它,但不理解它的含义。不是作为评论编号。创建另一个关于stackoverflow的问题,我相信你会得到一个好的答案。(如果还没有)非常感谢您的回复!你是对的,Base.Prod2{LinSpace{Float64},LinSpace{Float64}
不一定很漂亮。我相应地编辑了原始问题。@fabian我不想成为坏消息的传递者,但在《朱莉娅7》中,这个问题实际上扩展得相当明显:ptypeof(Base.product(linspace(0,1,10),linspace(0,1,10))
现在是Base.Iterators.Prod2{StepRangeLen{Float64,Base.TwicePrecision{Float64},Base.TwicePrecision{Float64},StepRangeLen{Float64,Base.TwicePrecision{Float64},Base.TwicePrecision{Float64}
。话虽如此,您仍然可以使用“别名”这将在类型定义中使用别名:const LinProd=Base.Iterators.Prod2{StepRangeLen{Float64,Base.TwicePrecision{Float64},Base.TwicePrecision{Float64},StepRangeLen{Float64,Base.TwicePrecision{Float64},Base.TwicePrecision{Float64}
(遗憾的是,当对象实例化时,将显示完整的类型,而不是别名).