また、Javaでは==や!=で比較できるのは基本型に限られ、オブジェクトの比較は原則としてequalsメソッドを使いました。Scalaでもこれはほぼ同じですが、テキスト(String)も==や!=で比較することができます。
String
だけ特別な扱いのような誤解をあたえる?
Spec2はSpecs2のtypo
'シンボル = 値;
"= 値;" の部分いらない?コピペミス?
変数 = new Array[形名](要素数)
形名は型名のtypo
インスタンス作成時にこれらの処理が実行され、テストが行われていたのです
インスタンス作成しただけではテスト行われない。
Scalaの「基本コンストラクタ」というものです。newするとクラス内に直接書かれた基本コンストラクタのコードが実行されます
"基本コンストラクタ"というよりは、Javaのインスタンスイニシャライザと言ったほうがいいかもしれない?自分もちょっと自信がないので、誰か仕様書とかちゃんと調べて・・・
ただし、newでインスタンスを作成する際には、引数がないからといって()を省略することはできません
そんなことはないはず。
routesで対応しているhttpのメソッド一覧で、PATCH
が抜けてる?
@kmizu いや、たしか説明の文脈としてはspecs2での
の
should
などのコードを指して基本コンストラクタと言っていたのです。"基本コンストラクタ"といったら、あくまでクラス名から中括弧の間の部分
class Foo/* この部分 */ {
だと思っていたんですが、ボディーに書いた部分も、メソッドの外なら全部"基本コンストラクタ"って言っていいんですかね?
(もしそうだとしたら、それらを区別する場合、それぞれなんと呼べばいいのか?)
あと、どちらにしろspecs2の
should
は名前渡しだったりしてhttps://github.com/etorreborre/specs2/blob/SPECS2-2.3.6/core/src/main/scala/org/specs2/mutable/FragmentsBuilder.scala#L48
newするとクラス内に直接書かれた基本コンストラクタのコードが実行されます
という記述自体は、完全に間違いでもないのだけど、specs2の
should
やin
の仕組みや正しい実行順を真面目に説明しようとすると、かなり面倒で誤解を招きやすいというか。(もちろん、しつこくなるしあの本では全部詳細に説明するべきではないが)
正しくは
「classをnewすると
should
やin
の引数のブロックがどこかに渡されて、それらはnewした時点では評価されずにどこかに保持され、なんらかのメソッドを後から呼ぶことによって、実行される」という感じのはず。あと更に
DelayedInit
も関係する場合あるし・・・