見出し画像

TOPOS-Ξ を学ぼう!その8「いや、全部必要ってわけでもないのよ」

`space`全体をインポートする方法をお示しします:

// board-system.xi
export space BoardSystem {
    properties {
        continuous: Topology<Boolean> = true
        dimension: Topology<Number> = 2
    }

    shape Board {
        properties {
            width: Number
            height: Number
        }
    }

    mapping initialize() {
        properties {
            continuous: Boolean = true
        }
        
        path {
            setup_surface ->
            verify_dimensions ->
            prepare_for_use
        }
    }
}
// classroom.xi
import { BoardSystem } from "board-system.xi"

space Classroom {
    properties {
        continuous: Topology<Boolean> = true
        dimension: Topology<Number> = 3
        uses_board: Boolean = true
    }

    // インポートしたspaceを使用
    shape ClassroomBoard extends BoardSystem.Board {
        properties {
            mounted: Boolean = true
        }
    }

    // BoardSystemの機能を活用
    mapping setup_classroom() {
        path {
            prepare_room ->
            BoardSystem.initialize() ->  // インポートしたspaceの機能を使用
            verify_setup
        }
    }
}

spaceのインポート/エクスポートに関する重要な特徴:

  1. 完全なspaceのエクスポート

export space CompleteSpace { ... }
  1. 部分的なエクスポート

space PartialSpace {
    export shape ExportedShape { ... }
    export mapping ExportedMapping() { ... }
}
  1. 様々なインポート方法

// 全体インポート
import { CompleteSpace } from "space-file.xi"

// 特定の要素をインポート
import { Shape1, Mapping1 } from "space-file.xi"

// 別名を付けてインポート
import { CompleteSpace as CustomSpace } from "space-file.xi"
  1. 階層的な使用

space NewSpace {
    shape Extended extends ImportedSpace.Shape {
        // 継承と拡張
    }
    
    mapping use_imported() {
        path {
            ImportedSpace.initialize() ->
            perform_local_operation ->
            verify_state
        }
    }
}

このように、spaceレベルでの機能の再利用と構造化が可能です。