如何向这个 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 效果示例添加第二个骰子? 的相关文章

  • 极限学习机(Extreme Learning Machine,ELM)详解

    ELM ELM的提出目的是为了解决人工神经网络训练时耗费的时间和高成本 对此 xff0c 2004年由南洋理工大学的黄广斌提出了ELM学习理论 机器或者生物学习可以不需要调整隐层节点 xff1a 给定任何连续目标函数或者可分类目标 xff0
  • ELM极限学习实现汽油辛烷值预测(MATLAB)

    什么是极限学习机 xff1f 极限学习机 xff08 ELM Extreme Learning Machines xff09 是一种前馈神经网络 xff0c 最早由新加坡南洋理工大学黄广斌教授于2006年提出 该算法具有良好的泛化性能以及极
  • 高仿“饿了么”Vue项目(一)

    高仿 饿了么 Vue项目 一 当我们把Vue框架的概念过了一遍之后 要进一步提升 就要看看别人是怎么使用Vue框架来做项目了 在github上有不少好的Vue项目 我找到了其中的一个 并把它作为下一步学习的目标 链接地址 https git
  • 使用 elm 并选择

    我尝试通过自定义示例来了解 elm 的工作原理 durationOption duration option value toString duration text toString duration view Model gt Html
  • 使用本地包

    我在本地目录中有一个 Elm 包 源代码 所有构建工件 我想从另一个 Elm 包中使用它 而不发布库 所以我的目录设置如下所示 my lib elm package json my app elm package json 首先 跑步elm
  • 如何获得 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
  • JavaScript 中的函数响应式编程是否会导致侦听器引用出现更大问题?

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

    有一个希望很简单的问题 当我在更新函数中收到操作 A 时 我想返回一个执行某些操作的任务 然后生成操作 B 更新函数再次接收该操作 B 据我了解 从 Update 返回的任何效果都将由 startapp 执行 但似乎什么也没有发生 这是一个
  • 如何将 onClick 事件处理程序添加到 Elm 中的画布形状?

    是否可以添加 onClick 事件处理程序Graphics Collage square 我想知道点击的相对位置 在 Javascript 中 我可以做类似的事情this http jsbin com zikaxoguvu 1 edit h
  • 在 Elm 中,有没有办法合并联合类型? (出于模块化目的)

    从这三个声明开始 type SharedMsg SharedAction type Page1Msg Page1Action type Page2Msg Page2Action 我有办法获得相当于以下内容的方法吗 就像一种 合并 联合类型的
  • cabal 沙盒安装仍然失败,并显示“软件包可能会因重新安装而损坏”

    我正在尝试建立榆树平台 http elm lang org 使用阴谋集团沙箱 但是安装失败 并显示消息 软件包可能会因重新安装而损坏 在我看来 这似乎与沙盒的整个目的相矛盾 我曾相信沙盒应该避免这种错误 任何人都可以为我解释这个错误 甚至更
  • ELM QueryString 解析器无法编译

    我真的很想学习一些 ELM 但是我的思想在查询解析时崩溃了 我的想法是创建一个函数来按名称获取查询字符串值 例如 给定一个查询字符串 name Neuber像这样的函数getParam name 那会返回Neuber 但它在最基本的例子中失
  • “foldp”是否违反了 FP 的不可变状态原则?

    我正在学习 Elm七周内增加七种语言 http pragprog com book 7lang seven more languages in seven weeks 下面的例子让我很困惑 import Keyboard main lift
  • elm 中的“<<”运算符是什么意思?

    以下代码取自榆树形式示例 http elm lang org edit examples Intermediate Form elm 第 122 行 什么是 lt lt 运算符的意思是 Field field Field defaultSt
  • 如何向这个 elm 效果示例添加第二个骰子?

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

    我很惊讶地得知Array and ListElm 中有两种不同的类型 Array http package elm lang org packages elm lang core 4 0 1 Array List http package
  • Elm 调试器侧边栏太小。如何扩展呢?

    我有很长的消息 除了最后一部分之外 它们都是相同的 正如您在下面看到的 我无法区分 它们实际上是不同的 I ve open up the debugger with chrome and i saw this 但这在页面重新加载时不起作用
  • 从 elm 代码提交表单

    我有这个框架集划分 这是我的elm逻辑在里面main html import Html exposing import Html Attributes exposing view Model gt Html Msg view model H
  • Elm:两个键盘键在一起的信号?

    How would one create a signal for alt o or any other pair of keys in Elm 有没有内置的方法可以做到这一点 或者我必须自己创建一些东西 我对 Elm 很陌生 所以欢迎任何

随机推荐

  • 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