Files and Paths
Absolute Paths
A leading slash is enough to distinguish a simple absolute path from a relative one.
Classify a path
absolute_paths.swift
Replay: real traced execution (multi-file project)
let path = "/tmp/cache"
let isAbsolute = path.hasPrefix("/")
let kind = isAbsolute ? "absolute" : "relative"
let message = "\(path) is \(kind)"
print(message)
let path = "notes/readme.md"
let isAbsolute = path.hasPrefix("/")
let kind = isAbsolute ? "absolute" : "relative"
let message = "\(path) is \(kind)"
print(message)
let path = "/var/log/app.log"
let isAbsolute = path.hasPrefix("/")
let kind = isAbsolute ? "absolute" : "relative"
let message = "\(path) is \(kind)"
print(message)
path ← /tmp/cache, isAbsolute ← true, kind ← absolute, message ← /tmp/cache is absolute
1let path→ /tmp/cache = "/tmp/cache" //@path="notes/readme.md", "/var/log/app.log"2let isAbsolute→ true = path/tmp/cache.hasPrefix("/")3let kind→ absolute = isAbsolutetrue ? "absolute" : "relative"4let message→ /tmp/cache is absolute = "\(path/tmp/cache) is \(kindabsolute)"56print(message/tmp/cache is absolute)output/tmp/cache is absolute
path ← notes/readme.md, isAbsolute ← false, kind ← relative, message ← notes/readme.md is relative
1let path→ notes/readme.md = "notes/readme.md"2let isAbsolute→ false = pathnotes/readme.md.hasPrefix("/")3let kind→ relative = isAbsolutefalse ? "absolute" : "relative"4let message→ notes/readme.md is relative = "\(pathnotes/readme.md) is \(kindrelative)"56print(messagenotes/readme.md is relative)outputnotes/readme.md is relative
path ← /var/log/app.log, isAbsolute ← true, kind ← absolute, message ← /var/log/app.log is absolute
1let path→ /var/log/app.log = "/var/log/app.log"2let isAbsolute→ true = path/var/log/app.log.hasPrefix("/")3let kind→ absolute = isAbsolutetrue ? "absolute" : "relative"4let message→ /var/log/app.log is absolute = "\(path/var/log/app.log) is \(kindabsolute)"56print(message/var/log/app.log is absolute)output/var/log/app.log is absolute
absolute path
`hasPrefix("/")` is a small predicate that can drive a path classification.