2012-02-02(木)
Scalaの空括弧とUnit
Unit周りでハマったのでメモ。
まず、() => Any という型はあるが、()という型はない。
scala> def id(x: () => Int): () => Int = x
id: (x: () => Int)() => Int
scala> def id(x: ()): () = x
<console>:1: error: '=>' expected but ')' found.
def id(x: ()): () = x
^
Unit型の唯一の要素が()である。
scala> ().isInstanceOf[Unit] res67: Boolean = true
() => Any は Unit => Any とは違う。
// 型が違って代入できない scala> val emptyParentheses: () => Any = { () => 10 } emptyParentheses: () => Any = <function0> scala> val unit: Unit => Any = emptyParentheses <console>:17: error: type mismatch; found : () => Any required: Unit => Any val unit: Unit => Any = emptyParentheses ^ // 型が違って代入できない scala> val unit: Unit => Any = {(u: Unit) => 20} unit: Unit => Any = <function1> scala> val emptyParentheses: () => Any = unit <console>:17: error: type mismatch; found : Unit => Any required: () => Any val emptyParentheses: () => Any = unit ^
が、Unit => Any は空括弧で呼び出すことができる。
scala> def one(u: Unit): Int = 1
one: (u: Unit)Int
scala> one(())
res68: Int = 1
// これ、なんでエラーにならないのかわからず (Value Discardingから??)
scala> one()
res69: Int = 1
scala> one
<console>:18: error: missing arguments for method one in object $iw;
follow this method with `_' if you want to treat it as a partially applied function
one
^
// これは、要請がUnit型なら{ e; () }に変換するルール(Value Discarding)より
scala> one("DUMMYYY")
res71: Int = 1
// これもValue Discarding から??
scala> one(1, "XXX", Nil)
res72: Int = 1
トラックバック - http://d.hatena.ne.jp/hiratara/20120202/1328171553
リンク元
- 71 https://www.google.co.jp/
- 40 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCgQFjAA&url=http://d.hatena.ne.jp/hiratara/20120202/1328155695&ei=ckKAT5n8OK6YiAfqseC2BA&usg=AFQjCNE0NUFsm04wZD5xzQasBFZAj6Z9Cg&sig2=z3nAJbak4c1GAh5CWDkWdQ
- 39 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cts=1331025128168&ved=0CDQQFjAC&url=http://d.hatena.ne.jp/hiratara/20120202/1328155695&ei=3tRVT-rdELGbmQWS_5DZCQ&usg=AFQjCNE0NUFsm04wZD5xzQasBFZAj6Z9Cg&sig2=wiE8Uhv0G26dwt0vmEPHD
- 23 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&ved=0CEIQFjAE&url=http://d.hatena.ne.jp/hiratara/20120202/1328155695&ei=CIN3T9rkN5DDmQXmnPjpDw&usg=AFQjCNE0NUFsm04wZD5xzQasBFZAj6Z9Cg&sig2=G1t72FcBQhMcxkgyG5WN4Q
- 16 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CDMQFjAB&url=http://d.hatena.ne.jp/hiratara/20120202/1328155695&ei=Ptx_T9b8Ocn4mAWvl5zgBw&usg=AFQjCNE0NUFsm04wZD5xzQasBFZAj6Z9Cg&sig2=OMZsWPGwdYD_hAEGIlSpuw
- 14 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&ved=0CEAQFjAD&url=http://d.hatena.ne.jp/hiratara/20120202/1328155695&ei=1lZoT-j4H-ehmQWi5JCZCQ&usg=AFQjCNE0NUFsm04wZD5xzQasBFZAj6Z9Cg&sig2=vDQ6f0x_G4pbFadZ-skPUg
- 12 http://reader.livedoor.com/reader/
- 11 https://www.google.com/
- 10 http://t.co/WtYC5jJP
- 8 http://longurl.org





