Online Book Reader

Home Category

AppleScript_ The Definitive Guide - Matt Neuburg [137]

By Root 1561 0
or Unicode text (which might represent a Macintosh pathname or a POSIX pathname), are enough to make your head swim. The trouble is that there are many things you can't do; at the same time, there's always a workaround if you're willing to jump through hoops.

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

Return Main Page Previous Page Next Page

®Online Book Reader