1

ここでScalaクラスと問題を書き出すことは、コンパイラーがコードが適切な値を返さない単位であると考えることです。これは、クラスにプロパティを設定するために使用されるメソッドです。

def setObject(`object`:StripeObject):StripeObject = {
    this.`object` = `object`
  }

エラーは次のとおりです。type mismatch; found : Unit required: com.stripe.StripeObject

フルクラスは次のとおりです。

case class EventData(var previousAttributes: HashMap[String,Object], var `object`:StripeObject) extends StripeObject {

  def getPreviousAttributes = {
    previousAttributes
  }

  def setPreviousAttributes(previousAttributes: HashMap[String, Object]) = {
    this.previousAttributes = previousAttributes
  }

  def getObject = {
    `object`
  }

  def setObject(`object`:StripeObject):StripeObject = {
    this.`object` = `object`
  }
}

ユニットが返されないようにするにはどうすればよいですか?

4

3 に答える 3

5

Javaでは、セッターは通常、voidリターンタイプで定義されます。

public void setObj(StripeObject name);

Scalaに相当するものはUnit、です。これは、代入式の値でもあります。したがって、Scalaでは、セッターを次のいずれかとして記述します(これらはすべて同等であり、最初のものが最も慣用的です)。

def setObj(obj: StripeObject) {
  this.obj = obj
}

def setObj(obj: StripeObject): Unit = {
  this.obj = obj
}

def setObj(obj: StripeObject) = this.obj = obj

ただし、これはセッターの慣例にすぎず、必要に応じて値を簡単に返すことができます。

def setObj(obj: StripeObject): StripeObject = {
  this.obj = obj
  obj
}

これは少し珍しいことですが、期待していた発信者であっても、問題を引き起こす可能性は低いでしょうUnit

于 2012-06-07T22:35:58.940 に答える
2

これに頭を悩ませるのに少し時間がかかりましたが、Scalaの割り当てでは、Javaの場合のように値が返されません。彼らがこれをした理由はわかりませんが、彼らはしました。Scalaコンソールで確認できるように、いくつかのサンプルコードを次に示します。

scala> var number = 30
number: Int = 30

scala> var otherNumber = number = 40
otherNumber: Unit = ()

したがって、メソッドでを返す必要がありますobject。また、このようなコードで言語キーワードを使用することは避けてください。これは可能ですが、コードが読みにくくなります。

于 2012-06-07T22:27:14.353 に答える
2

あなたが見るすべての場合

whatever = something

に置き換えます

whatever = something ; whatever

そして、あなたは大丈夫でしょう。割り当て戻りUnitます。だから、あなたが返したいものを単に言い直してください。

于 2012-06-07T22:33:51.287 に答える