Julia:函数的偶数数据类型

瓦兰蒂尔

我有大约50个函数,它们应该只消耗偶数。现在,我每次都用“ if”检查是否输入的数字是否为零:

function grof(x::Int)
    if (x % 2) == 0
        println("good")
    else
        throw("x is not an even number!!!!!!!!!!!!! Stupid programmer!")
    end
end

理想情况下,我希望有一个自动生成此数据的数据类型,即

function grof(x::EvenInt)
    println("good")  
end

但是,由于我无法理解该纪录片,因此我无法自行生成此数据类型谢谢你的帮助!

最佳v。

弗朗索瓦·费沃特(FrancoisFévotte)

在这种情况下,我认为创建类型不是必需的:我只是简单地@assert在函数的开头验证条件。(很有趣的是,检查数字是否为偶数是在文档中选择用来说明的效果的示例@assert

例如:

julia> function grof(x::Int)
           @assert iseven(x) "Stupid programmer!"
           println("good")
       end
grof (generic function with 1 method)

julia> grof(2)
good

julia> grof(3)
ERROR: AssertionError: Stupid programmer!
Stacktrace:
 [1] grof(::Int64) at ./REPL[5]:2
 [2] top-level scope at REPL[7]:1




编辑:如果您确实要创建强制执行此类约束的类型,则是可能的。做到这一点的方法是

  1. 创建一个类型(可能是Number抽象类型之一的子类型;也许是Signed
  2. 定义一个内部构造函数,以确保此类类型不能包含奇数

一个非常简单的示例将基于以下内容:

# A wrapper around an even integer value
struct EvenInt
    val :: Int

    # inner constructor
    function EvenInt(val)
        @assert iseven(val)
        new(val)
    end
end

# Accessor to the value of an EvenInt
val(x::EvenInt) = x.val

# A method working only on even numbers
grof(x::EvenInt) = println("good: $(val(x)) is even")

您可以这样使用:

julia> x = EvenInt(42)
EvenInt(42)

julia> grof(x)
good: 42 is even

julia> y = EvenInt(1)
ERROR: AssertionError: iseven(val)
Stacktrace:
 [1] EvenInt(::Int64) at ./REPL[1]:5
 [2] top-level scope at REPL[6]:1

但是请注意,您还不能对EvenInts做任何操作:您需要解开它们(val()在这种情况下使用),或者定义对它们的操作(如果您EvenInt将抽象数之一作为子类型,则可以大大简化此任务类型并遵循相关界面)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在 Jest 中测试函数参数数据类型

F#函数参数数据类型

代数数据类型的Haskell映射函数

类型类与代数数据类型?

“参数类型为ntext的参数数据类型对于len函数的参数1无效”错误

参数数据类型 int 无效

TypeScript中的代数数据类型

过滤代数数据类型列表

Kotlin中的代数数据类型

扩展代数数据类型

代数数据类型的特征

理解代数数据类型的困难

Haskell 嵌套代数数据类型

Haskell链表代数数据类型

将函数参数数据类型修复为数据框 python

我很困惑,名字叫什么数据类型?函数数据类型还是布尔数据类型,因为它将返回布尔值?

记录语法中具有大量构造函数的代数数据类型的替代方法

C ++函数参数数据类型没有名称

没有构造函数的代数数据类型的目的是什么?

Haskell多态函数可在代数数据类型之间进行转换

Haskell:通过在C函数中创建代数数据类型来进行封送处理

函数日期的参数数据类型错误或结果太小或太大错误

ORACLE SQL,用于从函数中检测参数数据类型的If语句

SQL参数数据类型int对于charindex函数的参数1无效

参数数据类型 nvarchar 对于 SSRS 中转换函数的参数 3 无效

在GHC中优化单构造函数数据类型的澄清

仅需更改参数数据类型时如何重载函数

出现错误:子串函数的参数 2 的参数数据类型 varchar 无效

参数数据类型bigint对于子字符串函数的参数1无效