最終更新日 2024-09-25

「秀丸マクロ」のスコープと「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 );