Julia:函数的偶数数据类型

2024-02-12

我有大约 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

但是,我无法自己生成此数据类型,因为我无法理解记录 https://docs.julialang.org/en/v1/manual/types/index.html。感谢您的帮助!

Best, v.


我不认为在这种情况下创建一个类型是有必要的:我只是@assert https://docs.julialang.org/en/v1/base/base/#Base.@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

编辑:如果你really想要创建一个强制执行这种约束的类型,这是可能的。这样做的方法是

  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

但请注意,您无法执行任何操作EvenInt还没有:你需要打开它们(使用val()在这种情况下),或定义对它们的操作(如果您使该任务可以大大简化EvenInt抽象数字类型之一的子类型并遵循相关接口)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Julia:函数的偶数数据类型 的相关文章

  • Julia 中的并行梯度计算

    不久前我被说服放弃我舒适的 matlab 编程并开始使用 Julia 编程 我已经在神经网络方面工作了很长时间 我认为现在有了 Julia 我可以通过并行计算梯度来更快地完成工作 不需要一次性对整个数据集计算梯度 相反 我们可以拆分计算 例
  • 如何生成随机概率分布 julia

    我在字典中有一个键列表 我想为每个项目分配一个 0 到 1 之间的数字 使分配的数字总和为 1 如何做到这一点 我尝试使用 rand 进行一些操作 但没有成功 有什么建议么 更数学的答案是使用狄利克雷分布 https en wikipedi
  • 关于 Julia 中的 ndarray 创建:在额外维度中堆叠

    我想将以下 python 代码转换为 julia import numpy as np x np random random 4 5 6 y np array x x x 2 x 3 x 4 x print y shape gt 2 3 4
  • Julia 作用域:为什么这个函数会修改全局变量?

    我是 Julia 的新手 但到目前为止我还是它的粉丝 但根据多年的 R 编程经验 一些范围规则让我感到困惑 我们来看看这个函数 这与我的预期完全一致 function foo1 x y x t 1 while t lt 1000 t 1 y
  • 有没有办法在 julia-lang 中构建包依赖关系树?

    Using npm list将显示已安装的软件包 版本和关系的树 尽管 Julia 包管理有所不同 例如 通常不存在包的重复副本 但有什么方法可以 知道为什么要安装一个软件包吗 或构建包依赖关系树 我认为没有一个简单的函数 但是使用这两个函
  • 如何在命令行中执行 Julia 代码?

    我最近在 Julia 中转移了我的代码 我想知道如何在命令行中执行 Julia 代码 我知道 Julia 代码可以通过运行一次来 编译 但问题是我需要对集 群上的模拟模型进行参数扫描 我只能使用命令行 而不能使用 REPL 在集群上运行模拟
  • 如何加快 Julia 脚本的启动时间

    我编写了一个脚本来在 Julia 中绘制每日数据 但我发现它运行缓慢 似乎没有理想的方法来加速它 例如 foo jl bin bash exec julia O0 compile min BASH SOURCE 0 using Unicod
  • Julia 自定义类型分配

    我尝试从 Julia 中的自定义类型分配多个元素 但是我不知道该怎么做 或者换句话说 我想重载赋值运算符以返回该类型中包含的所有元素的元组 这是所需的行为 type foo a b end a b foo 1 2 a gt 1 这是错误消息
  • Julia 泛型函数类型参数

    我定义了一个函数如下 function approx pi n tot Float64 0 0 for i in 1 n x rand y rand if x 2 y 2 lt 1 tot 1 end end tot n 4 end pri
  • 使用 !== 或 != 将 Julia 变量与 `nothing` 进行比较

    在一些 Julia 代码中 何时可以看到条件表达式 例如 if val nothing dosomething end where val是一个类型变量Union Int Nothing 条件有什么区别val nothing and val
  • Julia:数组是否包含特定的子数组

    在 julia 中 我们可以检查数组是否包含值 如下所示 gt 6 in 4 6 5 true 然而 当尝试按特定顺序检查子数组时 这会返回 false gt 4 6 in 4 6 5 false 验证数组中是否存在特定子数组的正确语法是什
  • 如何创建并推送到共享或分布式数组数组?

    我编写了 Julia 代码 其中初始化一个空数组 如下所示 a 稍后在代码中 我简单地推送到该数组 如下所示 推 a b 其中 b c d e 是另一个数组 每个 b 可以具有不同的长度 这在非并行化代码中工作得很好 但是 我想在并行代码中
  • 在 Julia 中有效求解特定线性系统

    我广泛使用朱莉娅的线性方程求解器res X b 由于参数变化 我必须在程序中使用它数百万次 这工作正常 因为我使用的是小尺寸 最多30 现在我想分析更大的系统 最多1000 线性求解器不再有效 我认为可以有一个解决办法 然而我必须说 有时我
  • 在 Julia 中,有没有办法让“现在”(至少)达到毫秒精度?

    通常 要了解代码中发生的情况 您需要高精度时间来分析您的应用程序或出于其他原因 显然 现在 https stackoverflow com questions 32407509 how to get the milliseconds fro
  • @distributed 似乎有效,函数返回很不稳定

    我正在学习如何在 Julia 中进行并行计算 我在用着 sync distributed在 3x 嵌套的开始处for循环并行化事物 参见底部的代码 从线路上看println errCmp row col 我可以观察数组的所有元素errCmp
  • 从 Julia 中的文本文件读取数据矩阵

    我有一个包含矩阵的文本文件 我想在朱莉娅中将其作为矩阵来阅读 文本文件如下 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 1 1 0 在 matlab 中 您可以执行以下操作来创建矩阵M
  • 为什么 Julia 中的“where”语法对换行符敏感?

    在 Stack Overflow 上的另一个问题中 答案包括以下函数 julia gt function nzcols b SubArray T 2 P Tuple UnitRange Int64 UnitRange Int64 where
  • 如何在 Julia 中保存文件

    在某些时候 我认为 Julia v0 7 你可以做 save savepath thingtosave为了使用 Julia 保存文件 我尝试在 v0 7 上运行它 看看是否收到弃用警告 但即使在 0 7 上 它也说 save未定义 如何使用
  • 如何在 Julia 中进行两个变量数值积分?

    我可以使用 Julia 在 Julia 中进行单变量数值积分quadgk 一些简单的例子 julia gt f x cos x f generic function with 1 method julia gt quadgk f 0 pi
  • Julia:如何更新到软件包的最新版本(即 Flux)

    I have Julia 1 1 在本例中 我想更新到软件包的最新版本Flux 8 3 0根据Flux jl 的文档 https fluxml ai Flux jl stable 当我打字时 Pkg status Flux I get St

随机推荐

  • Python格式整数转换为固定长度字符串[重复]

    这个问题在这里已经有答案了 我想根据一个生成一个字符串int和零一起 并且长度应该始终为5不多也不少 For example Consider a Integer 1 Formatted String 00001 Consider a In
  • 什么是私有字节、虚拟字节、工作集?

    我正在尝试使用 perfmon windows 实用程序来调试进程中的内存泄漏 这是 perfmon 对这些术语的解释 工作集是该进程的工作集的当前大小 以字节为单位 工作集是进程中的线程最近接触的内存页集 如果计算机中的可用内存高于阈值
  • 为什么要对参数进行 null 转换? [复制]

    这个问题在这里已经有答案了 何时以及为什么有人会做以下事情 doSomething MyClass null 你曾经这样做过吗 您能分享一下您的经验吗 If doSomething已重载 您需要将 null 显式转换为MyClass因此选择
  • 计算给定月份的前 12 个月 - SimpleDateFormat

    我试图将给定月份 取自数据库 中的前 12 个月放入数组列表中 List
  • 如何强制 Apollo Client 使用缓存数据

    我们有一个最初加载小部件列表的应用程序 query Widgets widgets Widgets fragment Widgets on Widgets name description rootWidget widgets Widget
  • 由于“权限被拒绝”,docker compose down 失败

    跑步时docker compose stop它无法停止 docker 镜像 并给出如下错误 ERROR for nginx cannot stop container 5f5ed6d2110a0d845508ede160d8196d3e01
  • Scrapy + Splash:无法选择元素

    我正在学习使用 scrapy 和splash 作为练习 我正在尝试访问https www ubereats com stores https www ubereats com stores 单击地址文本框 输入位置 然后按 Enter 按钮
  • 运行“npmauditfix--force”会降级反应脚本

    我的 React 项目有一个很大的问题 我正在尝试更新项目中的库 但出现了问题 错误的 这是package json 请注意 react scripts版本设置为 4 0 3 name server version 1 1 0 descri
  • 未能找到构建工具修订版 21.1.1 - sdk 是最新的

    我正在运行 linux android sdk 安装 我的新项目需要构建工具 21 1 1 不知何故 这个构建工具不存在 尽管我的sdk是最新的 但在build tools文件夹中现在有android 4 4W文件夹 android 更新
  • 如何让 CMake 使用系统路径上的默认编译器?

    目前 我从构建目录调用 CMake 如下所示 CXX opt gcc 4 8 bin g cmake 让 CMake 使用这个特定的编译器 否则它使用操作系统默认编译器 我的路径有 opt gcc 4 8 bin那么 有没有办法在 CMak
  • Orchard CMS 中的 Work<> 类有什么用?

    简单明了 它的用例是什么Orchard Environment Work lt gt 类定义于Orchard Environment WorkContextModule cs 它可以在几个地方找到 例如 private readonly W
  • 将排序描述符应用于从模板创建的 NSFetchRequest

    我在核心数据模型中定义了一个名为 RemainingGaneProjections 的提取请求 我想执行该获取请求并按实体的属性之一对结果进行排序 我的代码如下所示 NSFetchRequest projectionsRequest mod
  • 如何防止/检测使用 EXP() 的 Postgresql 计算中的下溢

    在使用 EXP x 函数的查询中 我收到一个值超出范围 来自 pgsql 的下溢错误 x 的什么值会触发此操作 我该如何预防或检测它 函数 exp 称为指数函数 其反函数是自然对数 或以 e 为底的对数 数字 e 通常也被定义为自然对数的底
  • 在 Javascript 中获取查询字符串数组值[重复]

    这个问题在这里已经有答案了 我有一个使用 get 方法并包含一个数组的表单 http www example com name hello name world 我正在尝试使用 JavaScript 或 jQuery 检索数组值 hello
  • Chrome 51 滚动时出现奇怪的框阴影错误

    所以在制作网站时我发现了一个奇怪的box shadowChrome 51 上的错误 我的网站有一个固定标题 其中包含box shadow 当我向上或向下滚动时 框阴影会留下一些标记 水平灰线 我也无法在 jsfiddle 上重现这个错误 小
  • 当方向改变时重新创建活动时,媒体播放器不会加载

    我是新使用表面视图在视频播放器中播放视频的新手 现在我想在重新加载或重新创建视图时方向发生变化时保存媒体播放器的实例状态 然后旧媒体播放器状态从旧位置开始 而不是在零位置加载到原始装置上像屏幕方向一样在清单中设置 但当时 oncreate
  • 是否存在类似 Crashlytics 的 Web 应用服务?

    我是一名 Web 和 iOS 开发人员 在移动设备上 我们有著名的工具来收集应用程序引发的所有异常和错误 Crashlytics 和其他 只需几行代码即可安装 sdk 开始自动跟踪所有内容 然后他们在其网站上显示错误和有用信息以及优先级和其
  • DataGridView 中当前选定行的索引

    就是这么简单 如何获取当前选择的索引Row of a DataGridView 我不想要Row对象 我想要索引 0 n 有的是RowIndex http msdn microsoft com en us library system win
  • 对两个外键约束进行级联删除

    我有以下示例 Table A some id Table B another id Table C some id fk another id fk 我想级联一行Table C如果两者都some id and another id从各自的表
  • Julia:函数的偶数数据类型

    我有大约 50 个函数 它们应该只消耗偶数正数 现在我每次都用 if 检查输入的数字是否为零 function grof x Int if x 2 0 println good else throw x is not an even num