Function 指定类型时调用参数类型的函数(0.5)

Function 指定类型时调用参数类型的函数(0.5),function,types,julia,function-call,Function,Types,Julia,Function Call,(我指的是茱莉亚0.5) 假设我定义了一个函数: 乔治 调用参数化函数时,参数“拾取”的值由您在函数调用中放置的参数值的类型决定。信息流是从给定的参数到符号类型参数。因此,您不应该尝试调用f{AbstractFloat}(某种类型的\u数)。在这种情况下,某些类型的数字可能是例如Float64,这就构成了;但它可能是例如Int64,然后就发生了冲突 如果要强制数字变量采用特定的数字类型,正确的方法是直接转换它,或者为该情况定义转换(如果它不存在)。如果要捕获这种不匹配,正确的方法是将要指定的类型

(我指的是茱莉亚0.5) 假设我定义了一个函数:

乔治

调用参数化函数时,参数“拾取”的值由您在函数调用中放置的参数值的类型决定。信息流是从给定的参数到符号类型参数。因此,您不应该尝试调用
f{AbstractFloat}(某种类型的\u数)
。在这种情况下,
某些类型的数字可能是例如Float64,这就构成了;但它可能是例如Int64,然后就发生了冲突

如果要强制数字变量采用特定的数字类型,正确的方法是直接转换它,或者为该情况定义转换(如果它不存在)。如果要捕获这种不匹配,正确的方法是将要指定的类型与数字变量一起传递:

# below
# x is of type Real or of any subtype of Real
# T is Real or any type that is a subtype of Real
# so T may or may not equal typeof(x)

function f{T<:Real}(::Type{T}, x::Real)  
    y = convert(T, x)
    return g(y)
end

function f{T<:Real}(::Type{T}, x::Real)
    if typeof(x) == T
       #...
    else
       throw(ErrorException("msg"))
    end
end
下面的
#
#x是实数类型或实数的任何子类型
#T是Real或Real的子类型的任何类型
#所以T可能等于也可能不等于(x)
函数f{TGeorge

调用参数化函数时,参数“拾取”的值由您在函数调用中放置的参数值的类型决定。信息流是从给定的参数到符号类型参数。因此,您不应该尝试调用
f{AbstractFloat}(某种类型的\u数)
。在这种情况下,
某些类型的数字可能是例如Float64,这就构成了;但它可能是例如Int64,然后就发生了冲突

如果要强制数字变量采用特定的数字类型,正确的方法是直接转换它,或者为该情况定义转换(如果它不存在)。如果要捕获这种不匹配,正确的方法是将要指定的类型与数字变量一起传递:

# below
# x is of type Real or of any subtype of Real
# T is Real or any type that is a subtype of Real
# so T may or may not equal typeof(x)

function f{T<:Real}(::Type{T}, x::Real)  
    y = convert(T, x)
    return g(y)
end

function f{T<:Real}(::Type{T}, x::Real)
    if typeof(x) == T
       #...
    else
       throw(ErrorException("msg"))
    end
end
下面的
#
#x是实数类型或实数的任何子类型
#T是Real或Real的子类型的任何类型
#所以T可能等于也可能不等于(x)

函数f{T如果您不介意编写
f(BigFloat)
而不是
f{BigFloat}()
,您可以将函数定义更改为:

f{T}(args::T...) = f(T, args...)
f{T<:Real}(::Type{T}, x::T=one(T), y::T=one(T)) = x+y
f{T}(args::T…)=f(T,args…)

如果您不介意编写
f(BigFloat)
而不是
f{BigFloat}()
,您可以将函数定义更改为:

f{T}(args::T...) = f(T, args...)
f{T<:Real}(::Type{T}, x::T=one(T), y::T=one(T)) = x+y
f{T}(args::T…)=f(T,args…)

F{t谢谢你的回答,但是我非常了解
convert
函数和类型稳定性,你的答案不是我想要的。我正在寻找一种方法,除了一些类型信息之外,不给函数任何实际参数,而是将类型信息传递到函数中。Fabio对我的问题的第二个答案是这正是我想要的。谢谢你的回答,但是我非常了解
convert
函数和类型稳定性,你的答案不是我想要的。我在寻找一种方法,除了一些类型信息之外,不给函数任何实际参数,而是将类型信息传递到函数中。我问题的第二个答案是法比奥的表演正是我想要的。