为了实例化类似x = MyType{Int}()
我可以定义一个内部构造函数。
immutable MyType{T}
x::Vector{T}
MyType() = new(T[])
end
是否可以使用外部构造函数实现相同的目标?
答案 0 :(得分:1)
可以使用以下语法完成此操作:
(::Type{MyType{T}}){T}() = MyType{T}(T[])
第一组括号中的内容描述了被调用对象。 ::T
表示"类型为T",因此这是调用Type{MyType{T}}
类型对象的定义,这意味着对象MyType{T}
本身。下一个{T}
表示T
是此定义的参数,并且必须有一个值才能调用此定义。因此MyType{Int}
匹配,但MyType
不匹配。从那以后,语法应该是熟悉的。
这种语法肯定有点繁琐且不直观,我们希望在未来的语言版本中改进它,希望v0.6。
答案 1 :(得分:0)
我可能错了,但是如果你不能像这样构建无参数函数:
julia> immutable MyType{T}
x::Vector{T}
end
julia> MyType{T}() = MyType{T}(T[])
WARNING: static parameter T does not occur in signature for call at none:1.
The method will not be callable.
MyType{T}
julia> x = MyType{Int}()
ERROR: MethodError: `convert` has no method matching convert(::Type{MyType{Int64}})
...
因此你将无法做到这一点:
.model small
.stack 100h
.data
msg1 db 'Enter the number1:$'
msg2 db 'Enter the number2:$'
msg3 db 'After swap numbers are:$'
msg4 db 'Sum is:$'
num1 db ?
num2 db ?
sum db ?
diff db ?
.code
MAIN PROC
mov ax,@data
mov ds,ax
mov ah,09h ;display first msg
mov dx,offset msg1
mov ah,01h ;taking input
int 21h
mov num1,al
mov ah,09h ;display second msg
mov dx,offset msg2
int 21h
mov ah,01h ;taking input
int 21h
mov num2,al
mov bl,num1
mov cl,num2
mov num1,cl
mov num2,bl
mov ah,09h ;display third msg
mov dx,offset msg3
int 21h
mov ah,02h
mov dl,num1
int 21h
mov ah,02h
mov dl,num2
int 21h
mov bl,num1
add bl,num2
mov sum,bl
mov ah,09h ;display fourth msg
mov dx,offset msg4
int 21h
mov ah,02h
mov dl,sum
int 21h
mov ah,4ch
int 21h
MAIN ENDP
END MAIN
每个外部构造函数也是一个函数。
答案 2 :(得分:0)
你可以说
f(T::Type) = show(T)
以及
MyType(T::Type) = MyType(T[])
但是朱莉娅需要在电话中看到你知道你想要的类型。