2017-10-31 5 views
-1

次のコードでは、 "nothing"エラーを返す関数を処理する方法を示します。 ユースケース:アレイ[文字列] スケーラが期待されるArray [String] got Array [何もありません] - どのように処理するのですか?

  • を以下の条件文を使用して::

    • は、引数は引数に渡されコマンド
      • 引数が空白の場合、と引数を持っている場合、何か他の
      • を行います一部の値は、私は単純に引数

    はISSバック戻りますUE: コードが

    • が期待される旨のコンパイル時のエラースロー:アレイ[文字列]
    • をして得た:配列

    どのようにScalaでこれに対処するために[注目する]を?オプションを使用する場合は、どうすればよいですか?

    def main(args: Array[String]) = { 
        inp_schemas = Array("a","b") 
        inp_schemas.map{ x_schema =>                 
        val tables: Array[String] = 
         if (args.length == 0) { 
         <do something that returns array[string]>         
         } else { 
         args 
         } 
        } 
    } 
    
  • +0

    あなたは ''で何を返していますか? –

    +0

    何かがうまくいくか。配列[string]を返します。問題は、ユーザが入力引数を与えていないときにelse文に現れる – bigdatamann

    答えて

    2

    ここでは2つのことを考慮する必要があります。

    1)<do something>ブロックの戻り値。それがArray[String]であることを確認してください。

    2)主なことは、map関数がUnitを返すことです。最後のステートメントはtablesへの割り当てです。この問題を解決するには、変数と割り当てを削除するか、map関数の最後に返す変数を追加します。 2番目のソリューションについては、下記のコードを参照してください。

    inp_schemas.map{ x_schema =>                 
        val tables: Array[String] = 
        if (args.length == 0) { 
         <do something> // make sure this part returns an Array[String]       
        } else { 
         args 
        } 
        tables // returns tables 
    } 
    
    +0

    問題はelse文である - 入力引数がないとき、argsは "null"/nothingで、valテーブルが型不一致を投げる場所 – bigdatamann

    +0

    @datmannz 'args'が空の時とそうでないときの両方(' '戻り値が正しい限り)の両方で動作するはずです。 – Shaido

    +0

    "主な点は、マップ関数がユニットを返すことです。「あなたの意見に同意します。 "map"を "foreach"に変更しました – bigdatamann

    0

    あなたargs: Array[String]は何も含まれていない、すなわちval args = Array()それはアレイ[文字列]を期待しているが、引数が配列[何も]となりますので、それは、そのエラーがスローされます。コマンドライン入力を確認し、<do something>はArray [String]を返す必要があります。

    0

    したがって、メインクラスでargsをどのように定義していたのかがわかりました。

    以前これが起こっていたことだった。

    With no cmd input> val args = Array() 
    Results in> args: Array[Nothing] = Array() 
    
    With cmd inp> val args = Array("a","b") 
    Results in> args: Array[String] = Array(a, b) 
    

    私は、明示的にアレイ[文字列]として引数を定義した:

    With no cmd input> val args:Array[String] = Array() 
    Results in> Array[String] = Array() 
    With cmd inp> val args:Array[String] = Array("a","b") 
    Results in> Array[String] = Array(a, b) 
    

    両方のケースのArray [文字列]です。

    0

    あなたのmap関数は、if節の中で何をしても、あなたが渡すパラメータに関係なく、ユニットを返します。関数の戻り値の型はArray [Unit]で、値はArray(()、())

    私はあなたがしたいと思いますか?

    def main(args: Array[String]) = { 
        val inp_schemas = Array("a","b") 
        inp_schemas.map{ x_schema => 
        val tables: Array[String] = 
         if (args.length == 0) { 
         Array("a") 
         } else { 
         args 
         } 
        tables // Return tables 
        } 
    } 
    
    関連する問題