質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

Q&A

解決済

1回答

1408閲覧

Scala エラーの処理について

colorful

総合スコア23

Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

0グッド

0クリップ

投稿2019/02/02 06:48

編集2019/02/02 11:55

Scalaのプログラムを作成していて、途中の結果をコンパイルしたらtype mismatchのエラーが出てしまいました。

この原因を調べたのですが、よく分からなかったので教えていただけないでしょうか?
関数には、returnもしっかりと書きました。

scala:93: error: type mismatch;
found : Unit
required: String
else if(code.head =='B'){
^
scala:68: error: type mismatch;
found : Unit
required: String
else if(code.head == 'A'){
^
two errors found

【追記】
色々、考えてみたところelse if(code.head == 'A')とelse if(code.head =='B')の2行が型が違うみたいなのですが、どこが違うのかがわかりません。
教えていただけないでしょうか?
ちなみに、code:Stringと致しました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

前後のコードがわからないので、推測します。

found : Unit

これは、if else の場合分けにもれがある、つまり関数がString型の結果を返さない場合があるので、コンパイラが関数の型をUnit型と推論したと思われます。最も簡単な解決法は else を追加することです。

Scala

1else if(code.head =='B'){ 2... 3結果(String) 4} else { 5... 6結果(String) 7}

関数が値を返すときは、条件を網羅して同じ型を返さなければならない。

しかし仕様に戻って考えると、else を通ることはない、else はエラーにしたいなど様々な状況が考えられます。例外を投げることもできますし、関数の戻り値をSomeOptionにすることもできます。

まずは、else の追加で問題解決になるかどうか検討してください。推測が間違っていれば追記してください。

参考

条件が網羅されていないエラーの例です。

REPL

1scala> def oddEven(x:Int):String = if (x % 2 == 0) "偶数" 2<console>:12: error: type mismatch; 3 found : Unit 4 required: String 5 def oddEven(x:Int):String = if (x % 2 == 0) "偶数"

エラーを解決した例です。 ^

REPL

1scala> def oddEven(x:Int):String = if (x % 2 == 0) "偶数" else "奇数" 2oddEven: (x: Int)String 3

投稿2019/02/02 12:17

編集2019/02/04 12:42
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

colorful

2019/02/02 12:59 編集

ご回答ありがとうございます。 プログラムの構成としましては、以下のようにしております。 code:String var w ="" var x ="" var y ="" var z="" if(code.head == 'B'){ if(code.length !=1){ x=code.drop(1) if(…){    (処理の内容) return w }else if(…){ (処理の内容) return x }else if(処理の内容){ return y }else{ return z } しかし、1行目のところでtypemismatchのエラーが出てしまって、改良に困っています。 あと、w,x,y,zには(処理の内容)の中で別の関数を呼び出して処理を行った結果を入れております。
退会済みユーザー

退会済みユーザー

2019/02/02 13:41

if(code.head == 'B'){ この条件以外(else)の時に値を返しているか? if(code.length !=1){ この条件以外(else)の時に値を返しているか? すべての場合に値を返すようにしてください。
colorful

2019/02/04 10:49 編集

お騒がせしました。 if~else文の処理の中で1つreturn文をつけ忘れていました。 無事解決いたしました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問