Functions: Format Strings
The Hack typechecker checks that format strings are being used correctly.
Quickstart
// Correct.
Str\format("First: %d, second: %s", 1, "foo");
// Typechecker error: Too few arguments for format string.
Str\format("First: %d, second: %s", 1);
This requires that the format string argument is a string literal, not a variable.
$string = "Number is: %d";
// Typechecker error: Only string literals are allowed here.
Str\format($string, 1);
Defining Functions with Format Strings
You can define your own functions with format string arguments too.
function takes_format_string(
\HH\FormatString<\PlainSprintf> $format,
mixed ...$args
): void {}
function use_it(): void {
takes_format_string("First: %d, second: %s", 1, "foo");
}
HH\FormatString<PlainSprintf> will check that you've used the right
number of arguments. HH\FormatString<Str\SprintfFormat> will also
check that arguments match the type in the format string.
Format Specifiers
See PlainSprintf for in-depth information on all format specifiers.
| Specifier | Expected Input | Expected Output |
|---|---|---|
| b | int | Binary (63 => 111111) |
| c | int | ASCII character (63 => ?) |
| d | int | Signed int (-1 => -1) |
| u | int | Unsigned int (-1 => 18446744073709551615) |
| e | float | Scientific Notation, as lowercase (0.34 => 3.4e) |
| E | float | Scientific Notation, as uppercase (0.34 => 3.4E) |
| f | float | Locale Floating Point Number |
| F | float | Non-Locale Floating Point Number |
| g | float | Locale Floating Point Number or Scientific Notation (3.141592653 => 3.14159, 3141592653 => 3.1415e+9). |
| o | int | Octal (63 => 77) |
| s | string | string |
| x | int | Hexadecimal, as lowercase (63 => 3f) |
| X | int | Hexadecimal, as uppercase (63 => 3F) |
Thank You!
Thank You! If you'd like to share more feedback, please file an issue.