Estoy bastante seguro de que mi pregunta es sólo una cuestión de sintaxis general, pero incluyendo el contexto específico en caso de que sea relevante:
Hay una aplicación para Mac llamada SwitchResX que te permite hacer cosas interesantes como crear y utilizar resoluciones personalizadas en monitores Mac. Tiene un proceso en segundo plano llamado "SwitchResX Daemon" que es AppleScriptable.
Entre otras cosas:
application
(clase) tiene uno o másdisplay
elementosdisplay
(clase) tiene uno o másmode
elementosmode
(clase) tiene propiedades comoheight
,width
(números enteros) ,frequency
(real) ,valid
(booleano) etc.
Tengo dos problemas relacionados:
Problema 1: de quién/dónde es X en {...}
tell application "SwitchResX Daemon"
set theDisplay to the second display
set theModes1 to theDisplay's every mode where it is valid and ((its width is 3008) or (its width is 2560)) --> {mode 8 of display 2, mode 12 of display 2} = expected and desired result
set theModes2 to theDisplay's every mode where it is valid and (its width is in {3008, 2560}) --> …error: Can’t make {3008, 2560} into type specifier.
end tell
Utilizo if
afirmaciones como if width is in {3008,2560} then ...
mucho. ¿Puede el is in {...}
no debe utilizarse en un whose
/ where
¿o me equivoco de sintaxis?
Problema 2: Tengo la necesidad de dividir el filtrado en al menos una situación. Entonces...
tell application "SwitchResX Daemon"
set theDisplay to the second display
set theModesAllValid to theDisplay's every mode where it is valid --> {……, mode 8 of display 2, mode 12 of display 2, ……} = expected and desired result
set someModes1 to theModesAllValid's first item where ((its width is 3008) or (its width is 2560)) --> mode 8 of display 2 = expected and desired result
set someModes2 to theModesAllValid's first item where (its width is in {3008, 2560}) --> same error as problem 1 above
set someModes3 to theModesAllValid's every item where ((its width is 3008) or (its width is 2560)) --> error noted below**
set someModes4 to theModesAllValid's every item where (its width is in {3008, 2560}) --> error noted below**
end tell
-- **error = "Can’t get {……, mode 8 of display 2 of application "SwitchResX Daemon", mode 12 of display 2 of application "SwitchResX Daemon", ……} whose width of it = 3008 or width of it = 2560."
Así que someModes1
(utilizando first item
en lugar de every item
) funciona de forma similar a theModes1
en el Problema 1 (excepto item en lugar de list, como era de esperar). Y someModes2
da el mismo error que theModes2
(así, coherente al menos).
Pero entonces esperaría someModes3
y someModes4
para dar los mismos resultados que el problema 1, pero aquí el every
lo rompe de alguna manera. ¿Por qué? E incluso si no hay solución al problema 1 (es decir someModes4
no funcionará), ¿hay alguna forma de dividir el filtrado en dos pasos para alguna derivada de someModes3
a trabajar?
Gracias de antemano por cualquier ayuda.