「秀丸マクロ」のスコープと「hmPy/IronPython」のスコープとのリストやタプル関係のやり取り

  • 概要

    IronPythonの例題のひとつとなります。

    リストやタプルと添え字アクセス

    リストやタプルへののアクセス関数を確かめてみましょう。

    #PY = loaddll( hidemarudir + @"\hmPy.dll" );
    
    #_ = dllfuncw(#PY, "DoString", R"IPY(
    
    ary = [1, 2, 3]
    ary2 = [x*2 for x in ary] # ary2 = [2,4,6]となる
    
    )IPY"
    );
    
    #target = dllfuncw(#PY, "GetNumItemOfList", "ary2", 2);  // ary2[2]を数値として取得ということ
    
    message(str(#target));
    
    #_ = dllfuncw(#PY, "SetStrItemOfList", "ary2", 2, "abc");  // ary2[2] = "abc"ということ
    
    $ary2 = dllfuncstrw(#PY, "GetStrVar", "ary2"); // ary2全体を文字列として取得。
    
    message($ary2);
    
    #_ = dllfuncw(#PY, "DoString", "ary2 = tuple(ary2)"); // リストを読み取り専用となるタプルに変更
    
    $ary2 = dllfuncstrw(#PY, "GetStrVar", "ary2"); // 再度、タプルにしたary2全体を文字列として取得。
    
    message($ary2);
    
    freedll( #PY );
    
    

    整数での添え字が可能なことの意味

    何もリストやタプルだけではありません。
    とにもかくにも obj[index]でindexは整数ということが前提の形を満たしてれば良いのです。

    以下のような myindex.pyを作成し・・・・

    class MyIndexClass:
        def __getitem__(self, index):
            return index * 100
    
    my_index_obj = MyIndexClass()
    

    次のようなマクロや関数の使い方も問題なく成立します。

    #PY = loaddll( hidemarudir + "\\" + "hmPy.dll" );
    
    #_ = dllfuncw(#PY, "DoFile", currentmacrodirectory + "\\myindex.py");
    
    #num = dllfuncw(#PY, "GetNumItemOfList", "my_index_obj", 30); // my_index_obj[30] を得る
    
    message(str(#num));
    
    freedll( #PY );