如何向这个 elm 效果示例添加第二个骰子?

2024-04-09

我是 Elm 新手,一直在查看以下示例(请注意,这是在较新的 0.17 架构下,其中 Action 现在是 Command):http://elm-lang.org/examples/random http://elm-lang.org/examples/random

后续挑战是向示例中添加第二个骰子,以便单击按钮即可为每个骰子滚动一个新值。我的想法是更改模型以保存两个单独的值,每个骰子一个,ala

type alias Model =
       { dieFace1 : Int
       , dieFace2 : Int
       }

在我到达更新块之前,这一切都很好。我不确定如何更新随机数生成器以创建两个值。该功能对我来说有点混乱。

type Msg
  = Roll
  | NewFace Int Int


update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
  case msg of
    Roll ->
      **(model, Random.generate NewFace (Random.int 1 6))** <-- not sure what to do here

    NewFace newFace1 newFace2 ->
      (Model newFace1 newFace2, Cmd.none)

Random.generate 函数的文档有点简单 -

生成:(a -> msg) -> 生成器 a -> Cmd msg

创建一个将生成随机值的命令。

这是否是处理两个骰子的正确方法,还是有更好的方法?我是一个 elm 菜鸟,请友善:)


Random.int是一个原始生成器,它为您提供一个随机整数。您需要一个生成器来恰好为您提供两个随机整数。

随机数生成器可以由更原始的生成器构建,以创建更复杂的生成器。幸运的是,Elm 正好有这样的功能,Random.pair http://package.elm-lang.org/packages/elm-lang/core/4.0.0/Random#pair它允许您指定元组的每个部分需要哪两个生成器。

让我们将骰子生成器放入其自己的函数中以避免重复:

dieGenerator : Random.Generator Int
dieGenerator =
  Random.int 1 6

现在我们可以构建另一个生成器,它为我们提供一对骰子的随机值:

diePairGenerator : Random.Generator (Int, Int)
diePairGenerator =
  Random.pair dieGenerator dieGenerator

由于我们正在处理整数元组,因此让我们更新您的Msg的定义NewFace Int Int to NewFaces (Int, Int)。这将使您的Roll处理程序要漂亮、干净:

Roll ->
  (model, Random.generate NewFaces diePairGenerator)

如果您想尝试超越这一点,请考虑需要什么才能允许滚动任意数量的骰子。采用从更原始的生成器构建复杂生成器的想法,并使用文档Random http://package.elm-lang.org/packages/elm-lang/core/4.0.0/Random模块为我们提供了指南。

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

如何向这个 elm 效果示例添加第二个骰子? 的相关文章

  • 黄广斌谈ELM进展:为深度学习提供理论支持, 将勾连生物学习

    强大的深度神经网络 仍有很多待解决的问题 超限学习机 ELM 发明人 新加坡南阳理工大学副教授黄广斌认为 ELM能够有效地拓展神经网络的理论和算法 近日 黄广斌发表文章 超限学习机 筑梦普适学习和普适智能 Extreme learning
  • 如何在 Elm 中提交表单?

    这是一个非常基本的问题 但我没有找到任何例子 我有这样的看法 view address model div div text lt ID toString model id form input value model title text
  • elm 生成随机数

    我想在 elm 中的两个值之间生成一个随机 int 像这样的东西 nb random 0 10 我已阅读该文档和多篇文章 最好的答案来自这个 stackoverflowpost gen Random int 0 10 seed0 Rando
  • 思考 Elm 中看到的模式名称以及是否有其他类似情况

    我现在是FP的学生 当我查看不同函数语言提供的不同语法时 我在 Elm 示例代码中发现了一种模式 我对此很好奇 这是示例代码 myList foo bar1 foo bar2 foos myList gt List map foo 在这里的
  • Just in Elm 的目的是什么?

    所以 我一直在做 Elm 曲目锻炼网 https exercism org track elm我刚刚完成了关于Maybe概念 但有一件事我还不清楚 目的是什么Just在定义中Maybe type Maybe a Nothing Just a
  • 如何获得 Elm 风格

    我从 Elm 开始 当你想设置样式时 你可以简单地将它嵌入到你的组件中 Html Attribute style List String String 但我找不到办法get样式而不是设置 其实我需要的是line height特定的 CSS
  • 如何在 Elm 中获取 window.location.href?

    我有一个index html其中包含我的 Elm 应用程序 Elm 应用程序使用各种GETs 到由同一服务器提供服务的 APIindex html 而不是在我的 Elm 代码中硬编码 URLGETs e g url http localho
  • Elm:将包含单个元素的 JSON 数组解码为字符串

    看过类似的东西 但找不到确切的问题 我有一个从服务器端验证返回的 JSON 如下所示 field field name messages message message 我想做的是将其解码为 elm 记录 例如 field String m
  • Elm - 文本区域选择范围消失

    I implemented a
  • JavaScript 中的函数响应式编程是否会导致侦听器引用出现更大问题?

    在 JavaScript 中 观察者模式经常被使用 其中有一件棘手的事情 那就是主体保留观察者的参考资料 他们需要清理 对于常规应用程序 我使用以下经验法则 如果主体的寿命短于 或等于 观察者 我可以这样做subject on event
  • 从更新函数触发操作

    有一个希望很简单的问题 当我在更新函数中收到操作 A 时 我想返回一个执行某些操作的任务 然后生成操作 B 更新函数再次接收该操作 B 据我了解 从 Update 返回的任何效果都将由 startapp 执行 但似乎什么也没有发生 这是一个
  • 如何在 Elm 中打印所选选项的索引?

    我有一个
  • 通过端口调用window.open

    我正在实施社交身份验证 当用户单击按钮时 我发送一条命令 以便我可以调用window open Looking at this call stack we can see that the port handler is called in
  • 在 Elm 中,有没有办法合并联合类型? (出于模块化目的)

    从这三个声明开始 type SharedMsg SharedAction type Page1Msg Page1Action type Page2Msg Page2Action 我有办法获得相当于以下内容的方法吗 就像一种 合并 联合类型的
  • Angular.js 与 Elm 相比有何优缺点?

    我正在考虑在浏览器中进行一些反应式编程并比较 angular js http angularjs org http angularjs org 与榆树 http elm lang org http elm lang org 各自的相对好处
  • ELM QueryString 解析器无法编译

    我真的很想学习一些 ELM 但是我的思想在查询解析时崩溃了 我的想法是创建一个函数来按名称获取查询字符串值 例如 给定一个查询字符串 name Neuber像这样的函数getParam name 那会返回Neuber 但它在最基本的例子中失
  • Elm:向 SVG 元素添加点击事件不起作用 – 这可能吗?

    我一直在尝试添加一个on click 向 Elm 中的 SVG 元素发送事件 以确定鼠标单击在该元素内的相对位置 下面给出了一个代码示例 您可以尝试运行http elm lang org try http elm lang org try显
  • elm:读取文件内容

    有没有办法读取文件elm 我想要一个xml设置文件 我将在其中保留不同的设置并用 elm 读取它 我已经看过这个parser https github com toburger elm xml parser 但它期望xml内容 而不是路径
  • 了解 Elm 中的通用联合类型

    我无法理解到底是什么Html msg类型是什么 或者它如何使用 我在 VirtualDom elm 中找到了这行代码 其中Html msg似乎是以下别名 type Node msg Node 这看起来像一个带有一个类型参数的通用联合类型 m
  • Elm 组件和视图:什么时候应该使用 `Html msg` 以及什么时候应该使用 `Html Msg`

    我正在做一个项目 我和我的队友正在讨论哪种方法更好 在我看来Html msg似乎更通用 所以我认为我们应该尽可能使用它 但除此之外我不能给他其他理由 另外 我来自 React 和 Redux 对我来说看起来像是带有签名的组件Html Msg

随机推荐

  • nodejs mysql 错误:连接丢失 服务器关闭了连接

    当我使用node mysql时 在12 00到2 00之间出现错误 TCP连接被服务器关闭 这是完整的消息 Error Connection lost The server closed the connection at Protocol
  • 如何始终显示滚动条

    滚动视图中的滚动条仅在我开始滚动时才可见 我怎样才能始终显示它 目前最好的方法是使用android fadeScrollbars false 在 xml 中相当于ScrollView setScrollbarFadingEnabled fa
  • 如何获取 woocommerce 的所有产品?

    我已经建立了 Woo Commerce 其中有 1000 多种产品 使用 Woocommerce Rest api php 库我试图获取所有产品 但它给了我 10 个产品 如果我使用filter limit 它会给我大约 400 个产品 但
  • 验证失败/正常时禁用/启用 h:commandButton

    我有一个带有验证器和命令按钮的文本框 当文本框验证失败时 我想禁用命令按钮 否则应该启用它 我不想使用任何代码隐藏 因此它应该在 bean 中没有任何辅助属性的情况下工作 那么我如何根据验证器状态告诉命令按钮被禁用 启用
  • jQuery Mousemove:5px 变化时触发

    出于多种技术原因 我在 jQuery 上实现自己的 可拖动 功能 而不是使用 jQuery UI 并且我使用 mousedown 和 mousemove 事件来侦听尝试拖动元素的用户 到目前为止效果很好 我只是想每移动 5 像素 而不是逐像
  • 制作带有源子目录的文件

    我最新的项目是用 C 编写的 我使用的是 GNU Make 项目目录布局如下 project src subdir1 subdir2 containing tests doc bin 我希望能够致电make在顶级目录中 即项目目录中需要一个
  • 在 Java 中使用 lambda 表达式有运行时优势吗? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在阅读一些关于 Java 8 中提供的 lambda 表达式的博客和答案 我无法弄清楚单位 lambda 表达式是否有任何运行时优势 我
  • Jupyter笔记本,如何同时运行多个单元?

    我定义了一个运行 bash 脚本的 python 函数 假设该函数是 calc x y z 如果我在 python 中使用一些变量运行这个函数 gt gt gt calc 1 2 3 它生成一个 C 代码 使用变量来模拟某些东西 x 1 y
  • 使用 awk 读取串行输入,插入日期

    我正在尝试重新格式化串行输入 该输入由两个用逗号分隔的整数组成 从 Arduino 发送 1 2 3 4 0 0 0 1 我想在每行后面附加日期 用制表符分隔所有内容 到目前为止 这是我的代码 cat dev cu usbmodem3d11
  • 3d 表面的凸包算法 z = f(x, y)

    我有一个以一组三元组 x i y i z i 形式给出的 3D 表面 其中 x i 和 y i 大致位于网格上 并且每个 x i y i 都有一个关联的 z i 值 典型的网格是20x20 我需要在给定的公差范围内找到哪些点属于曲面的凸包
  • 如何通过流java8中的键获取所有不同的值

    我目前正在学习一些关于流的知识 我有以下 JSONArray 并且我希望能够检索所有不同的 xvalue datasets ds1 xvalues empty x1 x2 ds2 xvalues empty x1 x2 x3 我正在尝试以下
  • 如何正确构建我的 HTML 文件?

    对于一个基本的静态网站 有几个页面和子页面 我对 HTML 页面目录结构的最佳实践有点困惑 假设我有一个像这样的简单网站 索引 主页 页面 关于页面 联系页面和新闻页面 在新闻页面上 有两个链接指向新闻页面的两个子页面fizz html和b
  • 为什么Python函数有一个__dict__?

    在Python中 使用创建的函数def and lambda have a dict 属性 以便您可以动态地向它们添加属性 有一个 dict 每个函数都有内存成本 一个空的dictPython 2 6 中使用 140 个字节 向函数添加属性
  • 在 vb.net 中纠正图像方向服务器端

    在我正在开发的移动网络应用程序中 用户可以使用相机拍照 并将相机图像上传到服务器 我遇到的问题是 在 iOS 设备上 图像会获得与其关联的 EXIF 方向标签 例如 ROTATE 90 CW 该方向标签会导致图像在显示时以不正确的方向显示
  • Django与领域和自身的多对多关系独特

    我尝试使用语言和内容创建帖子 并将其与同一页面的其他版本相关联 但我陷入困境 class Page models Model content models TextField language models CharField max le
  • 如何在android中使用用户当前位置获取邮政编码

    我正在尝试获取邮政编码 但无法获取邮政编码 邮政编码 我可以获取当前城市 但是当我尝试获取邮政编码时 它给了我一个空指针异常 谁能帮我 final Geocoder gcd new Geocoder getApplicationContex
  • 字符的序数/int/ascii 值

    在 clojure repl 中我可以这样做 gt int a 97 在闭包脚本中 我不断得到 gt int a 0 在我当前的 clojurescript 项目中 我定义了一个 var def ord a int a 当我检查发出的 ja
  • C:将值扫描到数组中与常量的相等性进行比较的问题[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我对 C 完全陌生 现在我正在尝试掌握基础知识 但在从 scanf 读取数据和填充数组时遇到问题 根据我的观察 我认为问题出在 s
  • 有没有办法在android 2.1中不使用动画来旋转按钮

    我正在寻找旋转按钮的方法 不使用动画 我不想使用动画 因为this https stackoverflow com questions 8037185 onlclick listener is not working properly 如果
  • 如何向这个 elm 效果示例添加第二个骰子?

    我是 Elm 新手 一直在查看以下示例 请注意 这是在较新的 0 17 架构下 其中 Action 现在是 Command http elm lang org examples random http elm lang org exampl