Types 为了获得最佳性能,Julia中需要多长时间进行一次类型声明?

Types 为了获得最佳性能,Julia中需要多长时间进行一次类型声明?,types,julia,Types,Julia,我已经开始从python翻译我发明的一款棋盘游戏的游戏引擎。我知道我将要展示的示例是非常没有意义的,没有真正的需要对其进行优化,但是我希望在处理重函数之前正确地理解这一点 function howMany()::Int8 pieces::Int8 = 0 while pieces > 8 || pieces < 4 try print("How many pieces are we going to play with (min

我已经开始从python翻译我发明的一款棋盘游戏的游戏引擎。我知道我将要展示的示例是非常没有意义的,没有真正的需要对其进行优化,但是我希望在处理重函数之前正确地理解这一点

function howMany()::Int8
    pieces::Int8 = 0
    while pieces > 8 || pieces < 4
        try
            print("How many pieces are we going to play with (min 4, max 8)? ")
            pieces = parse(Int8, readline(STDIN))
        catch
            println("It must be an integer number between 4 and 8!")
        end
    end
    return pieces
end

function main()
    pieces::Int8 = howMany()
    #println(pieces, typeof(pieces))
end

main()
函数howmount()::Int8
片段::Int8=0
而件数>8件| |件数<4件
尝试
打印(“我们要玩多少件(最少4件,最多8件)?”)
片段=解析(Int8,readline(STDIN))
接住
println(“它必须是介于4和8之间的整数!”)
终止
终止
返回件
终止
函数main()
片段::Int8=多少个()
#println(件,类型(件))
终止
main()
是否需要声明Int8 4次(3次声明+解析参数)?
什么时候可以避免在没有任何性能权衡的情况下指定Int8?

在下面的两次中,这样可以避免昂贵的
try catch

function howMany()
    while true
        print("How many pieces are we going to play with (min 4, max 8)? ")
        pieces = get(tryparse(Int8, readline(STDIN)), Int8(0))
        4 <= pieces <= 8 && return pieces
        println("It must be an integer number between 4 and 8!")
    end
end

function main()
    pieces = howMany()
    println(pieces, typeof(pieces))
end

main()
函数多少()
虽然是真的
打印(“我们要玩多少件(最少4件,最多8件)?”)
片段=get(tryparse(Int8,readline(STDIN)),Int8(0))

谢谢!那么,您是在告诉我,由于函数总是返回相同类型的值,因此不必将
::Int8
添加到
片段(两次)或
多少()
(从性能角度讲)中。记住,一旦编译,所有内容都是键入的,这总是好的。因此,省略类型会使编译器不得不考虑它们,Julia的类型推断足以知道
howmount()
返回一个Int8,在
pieces=someInt8
之后,
pieces
是一个Int8。@DanGetz提供了一个很好的答案。我想我应该补充一点,我个人更喜欢在函数签名中包含类型信息,例如
myfunc(x::Float64)::Int
,尽管通常不需要这样做来获得类型稳定的代码。原因是,当您在6个月后回来查看代码时,它会让您的生活变得更轻松,而且从调试的角度来看,它也会让您的生活变得更轻松(例如,如果您试图将错误的类型输入到函数中,或者更改函数并意外地输出错误的类型,则会出现一个非常可解释的错误)