- 主题:Rust 有点油腻
rust函数不支持变长参数列表,没有办法用传统的printf那种函数
【 在 hothail 的大作中提到: 】
: 道理明白
: 但第一次看到rust的程序,这个写法
: 真是 感觉写法莫名其妙+第一眼看到的语句竟然是个宏
: ...................
--
FROM 111.196.181.*
宏
类型后置
expect是出现错误才执行
【 在 namoamituofo (如是我闻) 的大作中提到: 】
: 简单扫了下语法,有点劝退啊:
:
: println!("Hello, world!");
: 这叹号是咋回事?一个打印语句写这么丑。
--
FROM 124.127.66.*
这有啥不明白的,你第一次看到system.out.println,就不莫名其妙吗?
cout << "Hello World!" << endl不楞一下么?
printf("hello world")是简单,但写这个printf要用varargs,初学想学着写一个printf能写么?
python的print "hello world"是简单了,然后也为自己鲁莽的定了一个print关键字,而付出了十年的兼容性代价。
hello world看起来很简单,背后一点也不简单的好不好。这个东西一下就展现了语言背后的很多设计哲学,各自的取和舍。作为初学者,学就完事了,根本就没有评价的资格。
【 在 hothail 的大作中提到: 】
: 道理明白
: 但第一次看到rust的程序,这个写法
: 真是 感觉写法莫名其妙+第一眼看到的语句竟然是个宏
: ...................
--
修改:lvsoft FROM 116.233.45.*
FROM 116.233.45.*
作为一个初学者,还想这么多
printf是函数,理解多简单啊,
cout是流,就有点抽象了,但也能理解
谁好人家 "函数"后面加个感叹号啊(不贬低RUST啊)
【 在 lvsoft 的大作中提到: 】
: 这有啥不明白的,你第一次看到system.out.println,就不莫名其妙吗?
: cout << "Hello World!" << endl不楞一下么?
: printf("hello world")是简单,但写这个printf要用varargs,初学想学着写一个printf能写么?
: ...................
--
FROM 183.241.185.*
这不是就事论事,算是人身攻击了吧。
【 在 namoamituofo 的大作中提到: 】
: 简单扫了下语法,有点劝退啊:
: println!("Hello, world!");
: 这叹号是咋回事?一个打印语句写这么丑。
: ...................
--
FROM 183.161.94.*
哈哈,这要学haskel得疯
【 在 hothail 的大作中提到: 】
: 作为一个初学者,还想这么多
: printf是函数,理解多简单啊,
:
: cout是流,就有点抽象了,但也能理解
:
: 谁好人家 "函数"后面加个感叹号啊(不贬低RUST啊)
: --
发自「今日水木 on ALN-AL00」
--
FROM 124.126.137.*
rust 通过两阶段的宏实现了类型安全的变长参数:
print!() / println!()这样的声明宏 (macro_rules!):使用 $(...)* 语法在宏层面捕获任意数量的参数(Token)。
然后用编译器内置的 format_args! 宏在编译时解析格式化字符串、校验参数类型和数量,并将所有参数“打包”成一个单一的 std::fmt::Arguments 结构体。
最终完成任务的函数层面 (例如stdio::print):是一个普通的、非变长的函数接收这个 Arguments 结构体来完成实际工作。
做样就把 C 语言 printf 的运行时风险(例如 printf("%s", 10) 导致的未定义行为)完全转移到了 Rust 的编译时进行核查和规避,实现了它闻名遐迩的内存安全和类型安全。
【 在 gameplayer 的大作中提到: 】
: rust函数不支持变长参数列表,没有办法用传统的printf那种函数
:
--
FROM 123.120.4.*