11

さて、私が本当にやりたかったのは、配列があり、そこからランダムな要素を選択したいということです。明らかなことは、乱数ジェネレーターから 0 と長さマイナス 1 の間の整数を取得することです。これは既に作業しており、次にArray.getMaybe aを適用しますが、(同じことを行うパッケージ関数もあるようです。) Haskell から来て、インデックスが範囲外だった場合から私を保護しているという型の重要性を取得しますが、インデックスを制御できますが、制御しません。それが起こることを期待しているので、何かを手に入れたと仮定しJustて、やや強制的に に変換しaたいと思います。Haskell では、これは、fromJustまたは、冗長に感じた場合はfromMaybe (error "some message").Elmでこれを行うにはどうすればよいですか?

これについて議論しているように見える議論をメーリングリストで見つけましたが、しばらく経ちましたが、議論が示唆する標準ライブラリに必要な関数がありません。

これまでに見つけた、かなり満足のいかない潜在的な解決策をいくつか示します。

  • withDefaultを使用するだけです。私はa利用可能なデフォルト値を持っていますが、これは私のコードに完全に間違った意味を与え、おそらく将来のデバッグを難しくするので好きではありません.
  • ポートをいじって Javascript とやり取りし、Nothing の場合はそこで例外をスローします。これがどのように機能するかはまだ注意深く調査していませんが、明らかに可能です。しかし、これは単純な純粋な Elm とは異なり、あまりにも多くの依存関係を混同しているようです。
4

2 に答える 2

6

(私自身の質問に答える)

さらに満足のいく解決策が2つ見つかりました。

  • リンクされたディスカッションの他の場所で参照された、部分的に定義された独自の関数をロールします。しかし、コードはこのように不完全に感じられ (いつかコンパイラーが不完全なパターン一致について警告してくれることを願っています)、エラーメッセージはまだ不明です。
  • パターン マッチを行い、Nothing の場合はDebug.crashを使用します。これは Haskell のものに似ているように見えerror、私が今傾いているソリューションです。

    import Debug
    
    fromJust : Maybe a -> a
    fromJust x = case x of
        Just y -> y
        Nothing -> Debug.crash "error: fromJust Nothing"
    

    (それでも、モジュール名と説明は、私の目的に適した「正しい」方法とは思えないため、躊躇します。単なるデバッグではなく、真のプログラマ エラーを示したいと思います。)

于 2015-02-24T15:30:43.737 に答える