AppleScript_ The Definitive Guide - Matt Neuburg [137]
A Macintosh pathname string can be used to form a file specifier or alias. (A file specifier cannot be assigned to a variable or displayed as a result, but a reference to it can be.) A POSIX pathname string can be used to form a POSIX file specifier. (See Chapter 13.) As I pointed out earlier in the chapter, these are not coercions.
An alias can be coerced to a string representing its Macintosh pathname, and its POSIX path property is a string representing its POSIX pathname. An alias cannot be coerced to a file object, but a string can be used as an intermediary to form a file specifier:
set a to alias "gromit:Users:matt2:reason:Resources:"
POSIX path of a -- "/Volumes/gromit/Users/matt2/reason/Resources/"
a as string -- "gromit:Users:matt2:reason:Resources:"
a reference to file (a as string)
-- file "gromit:Users:matt2:reason:Resources:" of «script»
A Macintosh pathname can be coerced to an alias. (The item denoted by the pathname must exist at runtime; see Chapter 13.)
set s to "gromit:Users:matt2:reason:Resources:"
s as alias -- alias "gromit:Users:matt2:reason:Resources:"
A file object cannot be coerced to a string. But a file object can be coerced to an alias (though in the Panther version of Script Editor there's a bug that makes it appear that it can't be), which in turn can be coerced to a string. A file object's POSIX path property is a string representing its POSIX pathname.
set f to a reference to file "gromit:Users:matt2:reason:Resources:"
f as alias -- alias "gromit:Users:matt2:reason:Resources:"
POSIX path of f -- "/Volumes/gromit/Users/matt2/reason/Resources/"
A POSIX file can be coerced to a string representing its Macintosh pathname . A string representing a POSIX path can be coerced to a POSIX file:
set s to "/Volumes/gromit/Users/matt2/reason/Resources/"
POSIX file s as string -- "gromit:Users:matt2:reason:Resources:"
s as POSIX file -- file "gromit:Users:matt2:reason:Resources:"
Because an item must exist in order to form an alias to it, coercion to an alias is a good way to test whether the item denoted by a pathname exists:
on pathExists of s given posixStyle:b
try
if b then
POSIX file s as alias
else
s as alias
end if
return true
on error
return false
end try
end pathExists
pathExists of "gromit:Users:matt2" without posixStyle -- true
pathExists of "/Volumes/gromit/Users/matt2" with posixStyle -- true
Throughout the preceding, wherever I say "string," you should understand "or Unicode text," as, strictly speaking, a string might not express all the characters that the filesystem text encoding can express—whereas Unicode text should be able to do so.
Warning
I have found, though, that with some items on disk whose names contain Unicode-only characters, coercion between an alias and Unicode text, in either direction, can fail with a runtime error. This is probably a bug. The workaround is to construct an alias with an alias specifier, and use an alias's POSIX path property to obtain its pathname. To get a Macintosh pathname from an alias reliably, get its POSIX path property, form a POSIX file specifer, and coerce that to Unicode text.
List Coercions
Anything may be coerced to a list . How it is treated depends on what you start with:
A list
The result is identically the same list.
A record
The result is a list of the values from the record:
set R to {name:"Matt", age:51}
R as list -- {"Matt", 51}
Anything else
The result is a list of one item, that item being the thing you started with.
Coercion to a list is very useful for making sure you have a list; if the thing you start with isn't a list, it becomes one, and if it is a list, it is unchanged. Recall, however, that this coercion might not work if the thing you start with belongs to an application, because that application