我想通过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) 我目前正在开发一个游戏/模拟计算机,如物流系统(如我的世界 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)