Arguments (std.args)
The std.args module provides safe access to command-line arguments.
nic
import std.args;The Args Class
The Args class wraps argc and argv from C into safe Nic types.
Creating Args
nic
fn main(argc: i32, argv: **char) -> i32 {
let args = std.args.Args::from_main(argc, argv);
defer args.deinit();
// Use args...
return 0;
}Getting the Program Name
nic
let program = args.program(); // argv[0]
println("Running: " + program.as_str());Counting Arguments
nic
let count = args.len();
println("Got " + int_to_string(count) + " arguments");Accessing Arguments
nic
// Get argument by index (0-based, includes program name)
match args.get(1) {
Some(arg) => println("First arg: " + arg.as_str()),
None => println("No arguments provided"),
}Checking for Arguments
nic
if args.contains("--verbose") {
println("Verbose mode enabled");
}
if args.contains("-h") || args.contains("--help") {
print_help();
return 0;
}Getting a Slice of Arguments
nic
// Get all arguments starting from index 1 (skip program name)
let user_args = args.slice_from(1);
defer user_args.deinit();
for i in 0..user_args.len() {
match user_args.get(i) {
Some(arg) => println(" " + arg.as_str()),
None => {},
}
}Complete Example
nic
import std.args;
fn main(argc: i32, argv: **char) -> i32 {
let args = std.args.Args::from_main(argc, argv);
defer args.deinit();
// Check for help flag
if args.contains("-h") || args.contains("--help") {
println("Usage: " + args.program().as_str() + " [options] <file>");
println("Options:");
println(" -h, --help Show this help");
println(" -v, --verbose Enable verbose output");
return 0;
}
// Get the file argument
match args.get(1) {
Some(file) => {
println("Processing: " + file.as_str());
// Process the file...
},
None => {
println("Error: No file specified");
return 1;
},
}
return 0;
}API Reference
nic
class Args {
/// Create Args from main() parameters
pub fn from_main(argc: i32, argv: **char) -> *Args;
/// Number of arguments (including program name)
pub fn len(self) -> u64;
/// Get argument at index (0 = program name)
pub fn get(self, index: u64) -> Option[*String];
/// Get the program name (argv[0])
pub fn program(self) -> *String;
/// Get arguments starting from index
pub fn slice_from(self, idx: u64) -> *Vec[*String];
/// Check if an argument is present
pub fn contains(self, arg: string) -> bool;
/// Cleanup
pub fn deinit(self) -> unit;
}See Also
For more sophisticated command-line parsing with flags, subcommands, and help generation, see std.flags.