XList
Iterator, Queue, Stack として使えるリストのラッパーオブジェクトを提供する AppleScript のライブラリです。
AppleScript のリストの欠けている機能の多くを補完します。
また、AppleScript のリストはリファレンスを経由して要素を参照しないと速度が大きく低下するという性質があります。XList は内部で、常にリファレンスを経由してリストにアクセスする為、常に良好な動作速度が得られます。
use XList : script "XList"
on run
(*== Iterator ==*)
set an_iterator to XList's make_with({"a", "b", "c"})
repeat while an_iterator's has_next()
set an_item to next() of an_iterator
log an_item
end repeat
(*== Queue ==*)
set a_queue to make XList
a_queue's unshift("a")
a_queue's unshift("b")
log a_queue's shift() -- result : "b"
log a_queue's shift() -- result : "a"
(*== Stack ==*)
set a_stack to make XList
a_queue's push("a")
a_queue's push("b")
log a_queue's pop() -- result : "b"
log a_queue's pop() -- result : "a"
(*== Accessing list elements ==*)
set a_list to XList's make_with({"a", "b", "c"})
log a_list's item_counts() -- 3
log a_list's item_at(2) -- "b"
log a_list's has_item("b") --true
log a_list's has_item("d") --false
log a_list's index_of("b") -- 2
log a_list's index_of("d") -- 0
log a_list's delete_at(2) -- "b"
log (set_item of a_list for "e" at 2) -- "e"
log a_list's list_ref() -- {"a", "e"}
(*== Conversion to Text ==*)
log a_list's as_text_with(", ") -- "a, e"
(*== Looping with block script ==*)
set before_c to missing value
script block1
on do(x)
if (x is "c") then
return false
else
set before_c to x
return true
end if
end do
end script
an_iterator's each(block1)
log before_c -- result : b
script block2
on do(x, sender)
if x is "b" then
tell sender
set_item_at("d", current_index()) -- change an item of a list
end tell
end if
return true
end do
end script
an_iterator's enumerate(block2)
log an_iterator's all_items() -- result : {"a", "d", "c"}
(*== Generating new list using “map” ==*)
script block3
on do(x)
return x & "a"
end do
end script
log an_iterator's map(block3)
(*[XListInstance]
1 aa
2 da
3 ca*)
end run
更新履歴
- 1.8 -- 2020-06-17
- XText への依存性を無くした。
- as_xtext_with を削除
- XText の make_with_xlist を使ってください。
- as_list を追加。
- each および each_rush の返値を instance 自身にした。
- as_text_with, as_unicode_with, as_string_with の内部で text item delimiters は変更され、元に戻されません。
- XText の make_with_xlist を使うことを推奨します。
- 1.7.3 -- 2020-04-10
- each, map, map_as_list の性能を向上させた。
- each_rush を追加した。
- 1.7.2 -- 2020-01-27
- HelpBook.osax の代わりに、OpenHelpBook.scptd を使うようにした。
- 1.7.1 -- 2017-05-09
- ヘルプブック中の XText へのリンクが動作しない不具合を修正。
- 1.7 -- 2016-10-18
- OS X 10.9 で導入された AppleScript Libraries として使えるようにした。
- ModuleLoader.osax への依存性を無くした。
- OS X 10.9 以降が必要になった。
- 1.6r2 -- 2014-10-01
- HelpBook 中のサンプルコードのスクリプトリンクが機能しない不具合を修正。
- 1.6 -- 2012-11-28
- each, map, map_as_list はスクリプトオブジェクトの do ハンドラに要素への参照ではなく、要素そのものを渡すようにした。
- AppleScriptObjC での不具合を回避する為です。
- enumerate を追加。
- set_item_at を追加。
- each, map, map_as_list はスクリプトオブジェクトの do ハンドラに要素への参照ではなく、要素そのものを渡すようにした。
- 1.5 -- 2012-05-27
- add_from_list を追加。
- shallow_copy を追加。
- deep_copy を追加。
- iterator を追加。
- 1.4.1 -- 2012-04-21
- ヘルプをアップデート。
- Mac OS X 10.6 で、"Edit Script" リンク、ハンドラのコピーリンクが動作しない不具合を修正。
- item_at にインデックスのリストを与えることにより、複数の項目を取得できるようにした。
- as_text_with を追加。
- ヘルプをアップデート。
- 1.4 -- 2010-01-29
- ShowHelpBook への依存性を無くした。
- items_in_range を追加。
- count_items() でリストの長さを取得するのに、length of ではなく、count コマンドを使用するようにした。
- ModuleLoader 2.1 以降が必要です。
- 1.3 -- 2008-03-20
- StringEngine への依存性をなくした。
- 1.2.1 -- 2008.02.03
- exchange_items() を追加。
- 1.2 -- 2008.01.06
- next() で次の要素が存在しないときは、missing value を返すのではなく、error number 1351 を発生させるようにした。
- リストの要素として missing value を設定することも可能だからです。
- next() で次の要素が存在しないときは、missing value を返すのではなく、error number 1351 を発生させるようにした。
- 1.1.1 -- 2007.12.04
- リファレンスマニュアルのエラーを修正
- 1.1 -- 2007.07.10
- 名前を SmartList から XList に変更
- next_item を next に変更
- make_with , make, make_with_text, count_items, set_item, index_of, current_index, has_item,as_xtext_with, as_unicode_with, as_string_with を追加
- 1.0.2 -- 2007.06.01
- map, each でリストの内容を変更できるようにした。
- do ハンドラにはリストの要素へのリファレンスが渡されます。
- map, each でリストの内容を変更できるようにした。
- 1.0.1 -- 2007.05.30
- 英語ドキュメントを追加
- reset() を追加
- all_items() を追加
- each() を追加
- map() の仕様を変更
- 1.0 -- 2007.05.23
- First Release