Я не использую Йоджимбо. Тем не менее, AppleScript, whose
фильтры должны применяться к множественному объекту. Хотя selection
представляет собой список объектов, selection-object
представляет собой единую сущность, поэтому не может быть применен с помощью whose
. Теоретически, items of selection
были бы более подходящей коллекцией для фильтрации, но items
просто генерировали бы разыменованный list
который на самом деле также не может быть отфильтрован.
В других приложениях, которые используют selection-objects
selection
свойство выбора раздражает частичную разыменовку и, следовательно, не может фильтроваться с whose
.
Если бы это было возможно, length of its name
(то есть синтаксиса, который будет использоваться в таком фильтре) не является допустимым свойством для фильтрации.
К сожалению, в зависимости от того, как работают другие приложения с похожим объектом selection
, вам придется выполнять итерацию по списку вручную.
Однако, если речь идет об эффективности, вот довольно эффективный способ сделать это, как показано на примере объекта selection
в Finder, который представляет собой список файлов и папок:
property Finder : application "Finder"
to filterItems from (L as list) thru filter as handler into |L*| as list : null
local L, |L*|, filter
if |L*| = null then set |L*| to {}
script filteredItems
property array : L
property fn : filter
property list : |L*|
end script
tell the filteredItems to repeat with x in its array
if fn(x) = true ¬
then set ¬
end of its list ¬
to x's contents
end repeat
return the list of filteredItems
end filterItems
on characterCount(x)
set |name| to the name of x
|name|'s length > 12
end characterCount
filterItems from (Finder's selection) thru characterCount