如何在Mojo中打印含Bool类型的List?为何无法直接打印?
为什么Mojo无法直接打印
List[Bool]? 核心原因
报错的本质是List[Bool]类型没有实现Mojo标准库中的Writable trait,而print函数要求传入的参数必须符合该trait才能被输出。
细节说明
print函数的依赖
Mojo的print函数底层依赖Writabletrait完成对象的序列化输出——该trait定义了对象如何被转换为可写入输出流的格式。任何要被print直接处理的类型,都必须实现这个trait。List[Bool]的默认支持缺失
标准库中仅为部分List的特化类型(比如List[Int]、List[String])默认实现了Writable,但List[Bool]并没有被包含在内,因此直接传入print会触发类型不匹配的错误。
解决方法
方法1:遍历逐个打印元素
这是最简单的方式,直接遍历List并打印每个Bool元素:
def main(): m = List[Bool](True, False, True) for item in m: print(item)
方法2:手动构建字符串后打印
如果需要输出类似列表的格式,可以手动拼接字符串再打印:
def main(): m = List[Bool](True, False, True) var repr = "[" for idx, val in enumerate(m): if idx > 0: repr += ", " repr += str(val) repr += "]" print(repr)
方法3:为List[Bool]实现Writable trait(进阶)
如果需要频繁打印List[Bool],可以通过扩展为其实现Writable trait,之后就能直接用print输出:
from io import Writable, OutputStream extension List[Bool]: fn write(self, stream: &mut OutputStream): stream.write_all("[".utf8_bytes()) for idx, val in enumerate(self): if idx > 0: stream.write_all(", ".utf8_bytes()) stream.write_all(str(val).utf8_bytes()) stream.write_all("]".utf8_bytes()) def main(): m = List[Bool](True, False, True) print(m)
内容的提问来源于stack exchange,提问作者user32123338
相关产品推荐
相关产品推荐

