1

私は Elm (elm-server 0.9.2) にかなり慣れていませんが、私にとってかなりの障害となっている問題に遭遇しました。

これが私の問題です:

バージョン 0.9 のドキュメントによると、次のように記述できるはずです。

stripCommas str =
  case str of
    ',' :: rest -> stripCommas rest
    c   :: rest ->  c  :: stripCommas rest

これをテストするために、私は基本的に自分の機能を実行しました(非常に似ています:)):

stripNewLine str = 
  case str of
   '\n' :: rest -> stripNewLine rest
    c   :: rest ->  c  :: stripNewLine rest

しかし、それらのブースは失敗します。いくつかのデバッグの後、javascript でこれに気付きました:

var stripNewLine = function(str){
    return function(){
      switch (str.ctor) {
        case '::':
          switch (str._0) {
            case Chr '\n':
              return stripNewLine(str._1);
          }
          return _L.Cons(str._0,stripNewLine(str._1));
      }_E.Case($moduleName,'between lines 22 and 33')}();};

JavaScript についてはよくわかりませんが、Chr '\n' は Chr('\n') である必要があるようです。間違っている可能性があります...誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

3

これは Elm のバグであり、最新の安定版リリース以降に修正されています。おっしゃる通り、間違って生成された Javascript に関するものです。

さらに、アナウンス ブログ投稿からコピーしているサンプル コードにも論理的な問題があります。これは、非網羅的なパターン マッチを行っていることです。

文字列は char のリスト (つまりString、単なる a [Char]) であるため、適切なパターン マッチでは空のリストのケースを処理する必要があります。つまり、次のようになります。

stripCommas str =
  case str of
    []          -> str
    ',' :: rest -> stripCommas rest
    c   :: rest ->  c  :: stripCommas rest

main = asText <| stripCommas "1,2,3,4,5"

ここでこれをテストできます(バージョン オプションから "master/HEAD" を選択します。これは、JS 生成のバグがある現在のリリースよりも新しいバージョンです)。

于 2013-10-08T10:26:13.700 に答える