官术网_书友最值得收藏!

Type annotations

As we saw in Chapter 2, Variables, Types, and Operations, type-annotating a variable is done with the :: operator, such as in the function definition function write(io::IO, s::String) #... end, where the parameter io has to be of type IO, and s of type String. To put it differently, io has to be an instance of type IO, and s an instance of type String. The :: operator is, in fact, an assertion that affirms that the value on the left is of the type on the right. If this is not true, a typeassert error is thrown. Try this out in the REPL:

# see the code in Chapter 6\conversions.jl: 
(31+42)::Float64

We get an ERROR: TypeError: in typeassert, expected Float64, got Int64 error message.

This is, in addition to the method specialization for multiple dispatch, an important reason why type annotations are used in function signatures.

The operator :: can also be used in the sense of a type declaration, but only in local scope, such as in functions, as follows:

n::Int16 or local n::Int16 or n::Int16 = 5 

Every value assigned to n will be implicitly converted to the indicated type with the convert function.

主站蜘蛛池模板: 洛隆县| 镇江市| 新干县| 河北省| 盘山县| 建瓯市| 高州市| 工布江达县| 芜湖市| 改则县| 泾川县| 宜昌市| 南溪县| 瑞昌市| 招远市| 凤城市| 陇西县| 泗洪县| 邢台市| 广汉市| 彭州市| 资溪县| 柯坪县| 东莞市| 嵊泗县| 维西| 贵州省| 广饶县| 延安市| 获嘉县| 陵水| 磐安县| 邯郸市| 揭西县| 大港区| 新安县| 乡城县| 扶风县| 环江| 通榆县| 西平县|