首页 > 解决方案 > 使用级联表示法时无法在 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()它来使它工作,但我的问题不是如何使它工作,而是我想知道它不起作用的原因。

标签: dart

解决方案


因为这就是级联运算符的工作方式。

buffer..write('bar').toString();

等于做:

buffer.write('bar').toString();

在哪里:

buffer..write('bar')..toString();

等于:

buffer.write('bar');
buffer.toString();

您可以做些什么来使您的示例正常工作是添加这样的括号,以便我们更改每个部分的链接顺序:

(buffer..write('bar')).toString();

还找到了这个答案,它也提供了有关此行为的一些详细信息: 方法级联如何在 dart 中完全工作?


推荐阅读