#t , any , Type の違いは? - Printable Version +- Curl Global Community (https://communities.curl.com) +-- Forum: Discussions (https://communities.curl.com/forumdisplay.php?fid=1) +--- Forum: General Curl questions (https://communities.curl.com/forumdisplay.php?fid=2) +--- Thread: #t , any , Type の違いは? (/showthread.php?tid=966) |
#t , any , Type の違いは? - umemura - 09-10-2013 open-controls のソースを見ていたところ、「#t」という型の定義を見かけました。 内容をみるかぎり、どんな型のインスタンスがくるかわからないときに利用しているようなのですが、 これは「any」とは違うのでしょうか。 また、配列の {Array-of t:Type} のように、型定義に 「Type」や、「ClassType」を指定しているものもありますが、 これらにも違いはあるのでしょうか。 もしご存知の型がいらっしゃったら教えてください。 Code: {define-class public {DisplayFrame-of t:Type} {inherits BaseFrame} RE: #t , any , Type の違いは? - heavybugtracker - 09-13-2013 > ご存知の型 --> ご存知の方? ”#t”の中の t 自体は変数名でしょう? よく見られるのが、パラメータ化クラス定義ですね。 例: {define-class public {Array-of t:Type} || body of class } パラメータの型はType型です、すなわち、任意のデータ型を指定することができる。このパラメータtの値(Stringやintなど、Curlの認識できる型ならなんでもOK)の指定によって、違うクラス型になる。 {Array-of String}で指定する場合、データ型は{Array-of String}になり、 {Array-of int}で指定するなら、データ型は{Array-of int}になります。 型がわからない時に利用するのではなく、クラス定義の時に、データ型によってクラス定義をしたい場合に利用される。 ドキュメントにパラメータ化クラスの説明がありますので、詳細はドキュメントをご参照下さい。 RE: #t , any , Type の違いは? - wbardwell - 09-14-2013 #t means that the template will substitute in the nullable version of type 't' which you specified when you instantiate the template. (E.g. this is means that if you ask for {DisplayFrame-of String} that field will be #String. For non-class types there is no # variant (#int == int).) This is different from using 'any' in that the field or argument will be of the specified type, attempting to pass other types will cause a compilation error, and the storage will be the size of that type, and math operators will be natively compiled in the right type. (Note that you could do {DisplayFrame-of any} and lose all of those benefits, but it might be suitable in some cases.) Type means any type can be used, ClassType means that it must be a subclass of Object (anything defined with define-class.) (Type also includes value types and basic types like int.) RE: #t , any , Type の違いは? - umemura - 09-17-2013 heavybugtrackerさん、wbardwellさん、ありがとうございます。 なるほど。 Template の「t」なのですね。 また、この型宣言は、クラス宣言部でしか使えない、という認識です any 型ではなく、インスタンス時に型が決まるので、 プログラミング中に、フィールドやメソッドのオートコンプリートが表示されるわけですね。 Type と ClassType も、意味は若干異なり、前者はすべての型、後者はクラスの型をあらわす、という理解です。 勉強になりました。 Code: {define-class public {CustomClass-of t:Type} |