Nimチュートリアル【十二】
3305 ワード
指定シンボルを除外
一般的にimport文を使用すると、1つのモジュール内のシンボルがインポートされます.
特定の記号を除外するような場合(一部の記号をインポートしたくない場合)
EXcept句を使用できます
次のように
この行のコードはmymoduleモジュールのy記号を排除し、他の記号はインポートされました.
より多くの記号を除外するには、カンマで分割します.
指定記号のインポート
from文を使用して指定したシンボルをインポートすることもできます
次のコードを見てください.
上のコードではmymoduleモジュールのx,y,zの3つのシンボルのみがインポートされています
強制ネームスペースの制限
まず次のコードを見てみましょう
上のコードでは、
現在のモジュールがxを使用する場合は何の制限もなく、そのまま使用すればよい.
現在のモジュールで定義されているように
しかし、開発者は名前空間を持って一緒に使用することを望んでいます.
fromキーワードとnilキーワードを組み合わせることで、このような制限を実現することができます.
次のコードを見てみましょう
モジュール名が長い場合があります
またネームスペース限定を使う場合
大きなトラブルをもたらします
この場合、モジュール名に別名を付けることができます.
次のコードを見てください.
このようなコードを押すと、短いモジュール別名を名前空間として使用できます.
include文
include文とfrom文には本質的な違いがある
include文はコンパイル中にいくつかのファイルを1つのファイルにマージします
これは大きなファイルをいくつかのファイルに分割するのに役立ちます.
オブジェクト
Nimでは、オブジェクトはメタグループに似ています
オブジェクトも一連の異なるものを一緒に置く方法です
オブジェクトが多くのメタグループにない機能を提供する場合
オブジェクトは継承と情報非表示を提供します
オブジェクトのカプセル化プロパティのため、オブジェクトの構造方法はオブジェクトの内部にのみ使用できます.
(オブジェクトはオブジェクトを初期化する方法を提供する必要があります.これがコンストラクタです).
実行中にオブジェクトインスタンスのタイプにアクセスしたい場合は
次のコードなど、ofオペレータを使用できます.
*とマークされた属性は外部からアクセスできます.
オブジェクトのタイプはtypeでのみ定義できます
Nimのオブジェクトは継承をサポートしていますが、マルチ継承はサポートされていません.後でマルチ継承をサポートするかもしれません.
オブジェクトに適切な祖先がいなければ
彼の祖先としてRootObjを使うことができます
1つのオブジェクトタイプに祖先がいなくても、
しかし、祖先がいなければ、彼にも子孫がいない.
Inheritableを使用して、RootObj以外の子孫オブジェクトを生成できます.
(NimのGTKバッグはこんな感じ)
refキーワードを使用して継承関係を明確にする
注意:設計上の組み合わせは継承より優れていることが多い
自己参照オブジェクトタイプ
オブジェクト、メタグループは、かなり複雑なタイプ(データ構造)を作成できます.
たとえば、自己参照タイプ
次のコードを参照してください.
さて、今日はここまでにしますが、お好きな方はおすすめをお願いします
一般的にimport文を使用すると、1つのモジュール内のシンボルがインポートされます.
特定の記号を除外するような場合(一部の記号をインポートしたくない場合)
EXcept句を使用できます
次のように
import mymodule except y
この行のコードはmymoduleモジュールのy記号を排除し、他の記号はインポートされました.
より多くの記号を除外するには、カンマで分割します.
指定記号のインポート
from文を使用して指定したシンボルをインポートすることもできます
次のコードを見てください.
from mymodule import x, y, z
上のコードではmymoduleモジュールのx,y,zの3つのシンボルのみがインポートされています
強制ネームスペースの制限
まず次のコードを見てみましょう
from mymodule import x, y, z
x() # use x without any qualification
上のコードでは、
現在のモジュールがxを使用する場合は何の制限もなく、そのまま使用すればよい.
現在のモジュールで定義されているように
しかし、開発者は名前空間を持って一緒に使用することを望んでいます.
fromキーワードとnilキーワードを組み合わせることで、このような制限を実現することができます.
次のコードを見てみましょう
from mymodule import nil
mymodule.x() # must qualify x with the module name as prefix
x() # using x here without qualification is a compile error
モジュール名が長い場合があります
またネームスペース限定を使う場合
大きなトラブルをもたらします
この場合、モジュール名に別名を付けることができます.
次のコードを見てください.
from mymodule as m import nil
m.x() # m is aliasing mymodule
このようなコードを押すと、短いモジュール別名を名前空間として使用できます.
include文
include文とfrom文には本質的な違いがある
include文はコンパイル中にいくつかのファイルを1つのファイルにマージします
これは大きなファイルをいくつかのファイルに分割するのに役立ちます.
include fileA, fileB, fileC
オブジェクト
Nimでは、オブジェクトはメタグループに似ています
オブジェクトも一連の異なるものを一緒に置く方法です
オブジェクトが多くのメタグループにない機能を提供する場合
オブジェクトは継承と情報非表示を提供します
オブジェクトのカプセル化プロパティのため、オブジェクトの構造方法はオブジェクトの内部にのみ使用できます.
(オブジェクトはオブジェクトを初期化する方法を提供する必要があります.これがコンストラクタです).
実行中にオブジェクトインスタンスのタイプにアクセスしたい場合は
次のコードなど、ofオペレータを使用できます.
type
Person = ref object of RootObj
name*: string # the * means that `name` is accessible from other modules
age: int # no * means that the field is hidden from other modules
Student = ref object of Person # Student inherits from Person
id: int # with an id field
var
student: Student
person: Person
assert(student of Student) # is true
# object construction:
student = Student(name: "Anton", age: 5, id: 2)
echo student[]
*とマークされた属性は外部からアクセスできます.
オブジェクトのタイプはtypeでのみ定義できます
Nimのオブジェクトは継承をサポートしていますが、マルチ継承はサポートされていません.後でマルチ継承をサポートするかもしれません.
オブジェクトに適切な祖先がいなければ
彼の祖先としてRootObjを使うことができます
1つのオブジェクトタイプに祖先がいなくても、
しかし、祖先がいなければ、彼にも子孫がいない.
Inheritableを使用して、RootObj以外の子孫オブジェクトを生成できます.
(NimのGTKバッグはこんな感じ)
refキーワードを使用して継承関係を明確にする
注意:設計上の組み合わせは継承より優れていることが多い
自己参照オブジェクトタイプ
オブジェクト、メタグループは、かなり複雑なタイプ(データ構造)を作成できます.
たとえば、自己参照タイプ
次のコードを参照してください.
type
Node = ref NodeObj # a traced reference to a NodeObj
NodeObj = object
le, ri: Node # left and right subtrees
sym: ref Sym # leaves contain a reference to a Sym
Sym = object # a symbol
name: string # the symbol's name
line: int # the line the symbol was declared in
code: PNode # the symbol's abstract syntax tree
さて、今日はここまでにしますが、お好きな方はおすすめをお願いします