2012-03-15 8 views
3

質問のように言います。`()=> Unit`とは何ですか?

これは、コールバック関数の格納に使用されたList[() => Unit]にあります。

私はList[type]を理解しており、Unitは何も返さない関数の戻り型です。

答えて

8

(T1,...,Tn) => Tは、タイプT1からTnまでのパラメータと戻り値のタイプTを持つ関数のタイプです。したがって、() => Unitは、パラメータを取らず、戻り値の型Unitを持つ関数の型です。その結果、List[() => Unit]はそのような機能を含むリストのタイプです。

+0

"タイプT1からTnのパラメータ"なので、 'f(T1):Unit'、' f(T2):Unit'のような関数はそのリストの有効な型ですか? 'f(T1、T2)'のようなものはどうですか? – aitchnyu

+2

@aitchnyu No.リスト[(T1、T2)=>ユニット] 'のリストがある場合、そのリストには2つのパラメータ(最初のタイプはT1と2番目のT2) 。だから 'f(x:T1、y:T2):Unit'という関数を' f(x:T1) 'や' f(y:T2) 'として定義することはできません。同様に 'List [()=> Unit]型のリストは、まったくパラメータを持たない関数しか格納しません。 – sepp2k

4

まず、機能のリストがあります。各関数はパラメータをとりません(これは、閉じ括弧が()を意味します)。戻り値はUnitです。結果は空白に似ています。

純粋な関数世界では、何も返さず何も返さないので、型()=>Unitの関数は役に立ちません。しかし、Scalaは純粋に機能的な言語ではありません。副作用があります。有用であるためには、リストの関数には必ず副作用があります。彼らはコールバック関数なので、いつ発火するかについての考えも持っています。

関連する問題