小编Har*_*her的帖子

Haskell Scotty和Elm Http NetworkError

我想通过haskell用于后端和elm用于前端来研究Web开发.所以我写了这两个简单的"hello world"代码片段

榆树:

import Html exposing (..)
import Html.Events exposing (..)
import Http
import Json.Decode as Decode

main : Program Never Model Msg
main = Html.program
  { view = view
  , update = update
  , init = ("default", Cmd.none)
  , subscriptions = \_ -> Sub.none }

type alias Model = String

type Msg = Get | Response (Result Http.Error String)

update : Msg -> Model -> (Model, Cmd Msg)
update msg model = case msg of
  Get -> (model, get) …
Run Code Online (Sandbox Code Playgroud)

haskell httprequest web-development-server elm scotty

5
推荐指数
1
解决办法
273
查看次数

OCaml 中的游戏数据结构

我目前正在开发一个游戏/模拟计算机,如物流系统(如我的世界 mod 应用能量学)。

游戏的主要部分是块的二维网格。

所有的块都有共同的属性,比如位置。

但是应该有不同类型的块,例如:

  • 物品容器,
  • 输入和输出总线,
  • 等等。

在命令式面向对象语言(如 Java)中,我将使用以下方法实现:

  • 一个主块类
    • 具有共同的属性,如位置
  • 然后有子类
    • 从块类继承
    • 这些子类将实现不同块类型的不同属性。

ocaml我有点迷失了。

我可以创建继承的对象,但这在 Java 中不起作用。

例如:

  • 我不能将不同子类的对象放在一个列表中。

我还想通过将数据与逻辑分开来以不同的方式处理数据结构。我不会向对象添加方法。我尝试使用记录而不是对象。

我不知道如何实现不同的块类型。

我尝试使用这样的自定义数据类型:

type blockType = Container | Input | Output | Air
type block = {blockType :blockType; pos :int * int}
Run Code Online (Sandbox Code Playgroud)

我努力添加单独的附加属性。我尝试向块记录类型添加一个实体字段,该字段将包含其他属性:

type entity = Container of inventory | OutputEntity of facing | InputEntity of facing | NoEntity
Run Code Online (Sandbox Code Playgroud)

(其中库存和面也是自定义类型)

这个解决方案感觉不太合适。

我遇到的一个问题是我想对输入和输出类型的块执行逻辑操作。我必须重复这样的代码:

let rotateBlock block =
  match block.blockType with
  | Input -> {block with entity = …
Run Code Online (Sandbox Code Playgroud)

ocaml functional-programming data-structures 2d-games

3
推荐指数
1
解决办法
295
查看次数