gpt4 book ai didi

types - 如何检查类型的可变性

转载 作者:行者123 更新时间:2023-12-04 07:18:15 25 4
gpt4 key购买 nike

有没有一种方法可以检查类型是可变的还是不可变的?可以在编译时进行此检查吗(即,将if ismutable(T)分支编译掉以仅将代码路径用于可变性或不可变性)?

最佳答案

DataTypes有一个mutable字段,因此您可以使用它来定义is_mutableis_immutable,因为这样做而不是直接访问该字段更像朱利安(Julian)。

使用Julia版本 0.5.0 :

               _
_ _ _(_)_ | By greedy hackers for greedy hackers.
(_) | (_) (_) | Documentation: http://docs.julialang.org
_ _ _| |_ __ _ | Type "?help" for help.
| | | | | | |/ _' | |
| | |_| | | | (_| | | Version 0.5.0 (2016-09-19 18:14 UTC)
_/ |\__'_|_|_|\__'_| | Official http://julialang.org/ release
|__/ | x86_64-w64-mingw32

julia> DataType.    # <TAB> to auto complete
abstract hastypevars instance layout llvm::StructType name parameters super uid
depth haswildcard isleaftype llvm::DIType mutable ninitialized size types

julia> is_mutable(x::DataType) = x.mutable
is_mutable (generic function with 1 method)

julia> is_mutable(x) = is_mutable(typeof(x))
is_mutable (generic function with 2 methods)

julia> is_immutable(x) = !is_mutable(x)
is_immutable (generic function with 1 method)

为它们两个都创建一个 typeimmutable以及实例:

julia> type Foo end

julia> f = Foo()
Foo()

julia> immutable Bar end

julia> b = Bar()
Bar()

检查可变性:

julia> is_mutable(Foo), is_mutable(f)
(true,true)

julia> is_mutable(Bar), is_mutable(b)
(false,false)

检查不变性:

julia> is_immutable(Foo), is_immutable(f)
(false,false)

julia> is_immutable(Bar), is_immutable(b)
(true,true)

为了提高性能,还可以考虑将这些函数声明为 @pure:

Base.@pure is_mutable(x::DataType) = x.mutable

关于types - 如何检查类型的可变性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40706962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com