dart - 使用级联表示法时无法在 StringBuffer 上调用 `toString()`
问题描述
说,我有:
var buffer = StringBuffer();
buffer.toString(); // works (understandable)
buffer.write('foo').toString(); // fails because `write` returns `void` (understandable)
buffer..write('bar').toString(); // but why does it fail?
您可以看到buffer..write('bar')
返回一个StringBuffer
实例,我应该能够调用toString()
该实例。但为什么它不能那样工作。
PS:我知道我可以用buffer..write('bar')..toString()
它来使它工作,但我的问题不是如何使它工作,而是我想知道它不起作用的原因。
解决方案
因为这就是级联运算符的工作方式。
buffer..write('bar').toString();
等于做:
buffer.write('bar').toString();
在哪里:
buffer..write('bar')..toString();
等于:
buffer.write('bar');
buffer.toString();
您可以做些什么来使您的示例正常工作是添加这样的括号,以便我们更改每个部分的链接顺序:
(buffer..write('bar')).toString();
还找到了这个答案,它也提供了有关此行为的一些详细信息: 方法级联如何在 dart 中完全工作?
推荐阅读
- flutter - FutureBuilder Firestore 分页
- c++ - libavcodec:如何将原始视频(YUV420P)帧编码为有效位图以保存到“.bmp”文件?
- python - Azure 容器实例上的 Python ML 部署失败
- java - 为什么我不能通过直接访问来获取单例实例?
- android - 卡在谷歌播放控制台中的目标受众和内容
- node.js - NodeJS MongoDB Mongoose - 获取新创建的模式的 _.id
- python - 使用 BeautifulSoup 进行 Web 抓取 - 无法提取表行
- javascript - 如何使用 es6 或 lodash 在 javascript 中按索引对两个数组进行分组?
- arrays - 如何使用 VALUES 将数组接受到 CTE,然后作为单独的记录插入
- firebase - 在 signInWithIdp 的响应负载中的 pendingToken