小编Mic*_*iva的帖子

Elixir 结构真的是不可变的吗?

我目前正在学习 Elixir,并且正在阅读《使用 Elixir、OTP 和 Phoenix 进行功能性 Web 开发》,在我看来这是一本很棒的书。在状态机章节中,我想出了以下代码:

defmodule IslandsEngine.Rules do
  alias __MODULE__

  defstruct state: :initialized

  def new(), do: %Rules{}

  def check(%Rules{state: :initialized} = rules, :add_player), do:
    {:ok, %Rules{rules | state: :players_set}}

  def check(_state, _action), do: :error

end
Run Code Online (Sandbox Code Playgroud)

上面的代码应该作为一个功能齐全的状态机工作。我将在上面粘贴一些iex命令:

iex(1)> alias IslandsEngine.Rules
IslandsEngine.Rules

iex(2)> rules = Rules.new()
%IslandsEngine.Rules{state: :initialized}

iex(3)> {:ok, rules} = Rules.check(rules, :add_player)
{:ok, %IslandsEngine.Rules{state: :players_set}}

iex(4)> rules.state
:players_set
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,状态结构已从 更改:initialized:add_player。伟大的。

我的问题是:state:struct 真的是不可变的吗?我的意思是,该方法check/1返回带有语句的结构副本state: :players_set,该语句遵循正确的功能模式......但是它如何“覆盖”当前状态而不直接修改它? …

erlang struct elixir-mix elixir elixir-iex

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

使用Semantic-Ui阻止表单提交


我正在使用Semantic Ui Forms但我无法弄清楚如何在表单验证后阻止表单提交.
我在他们的文档中找不到任何东西......非常感谢.

这是我目前的提交脚本:

    $(function () {
    $('#formId').on('submit', function (e) {
      e.preventDefault();
      $.ajax({
        type: 'post',
        url: 'phpScriptUrl.php',
        data: $('form').serialize(),
        success: function () {
          //"ok" label on success.
          $('#successLabel').css("display", "block");
        }
      });
    });
  });
Run Code Online (Sandbox Code Playgroud)

forms validation ajax jquery semantic-ui

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

在Go中合并多个图像

我正在尝试用Go合并N个图像的数组(其中N将是一个动态值),但结果总是得到黑色图像。

这是我的代码:

package main

import (
    "image"
    "image/draw"
    "image/jpeg"
    "image/png"
    "log"
    "os"
)

func openAndDecode(imgPath string) image.Image {
    img, err := os.Open(imgPath)
    if err != nil {
        log.Fatalf("Failed to open %s", err)
    }

    decoded, err := png.Decode(img)
    if err != nil {
        log.Fatalf("Failed to decode %s", err)
    }
    defer img.Close()

    return decoded
}

func main () {
    var images = [4]string{"background", "shadow", "item1 ", "item2"}
    var decodedImages = [4]*image.RGBA{}

    for i, img := range images {
        decodedImage := openAndDecode("./imgs/" + …
Run Code Online (Sandbox Code Playgroud)

image image-processing go

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