我想定义一个可以选择接受参数的getter.我设法实现了这个目标,但只有()
在通话结束后我才能使用强制性功能.这是代码:
get children => ([role=null]) {
if(role == null || role == 'any') { return _children; }
else { return _children_by_role[role]; }
};
Run Code Online (Sandbox Code Playgroud)
所以现在我可以说
obj.children('something').length;
Run Code Online (Sandbox Code Playgroud)
要么
obj.children().length;
Run Code Online (Sandbox Code Playgroud)
但我不能说
obj.children; // this doesn't work
Run Code Online (Sandbox Code Playgroud)
因为它会导致以下错误:
Caught Closure call with mismatched arguments: function 'length' NoSuchMethodError : method not found: 'length' Receiver: Closure: ([dynamic])
Run Code Online (Sandbox Code Playgroud)
在Dart中,getters与访问对象属性无法区分,因此定义接受参数的getter是非法的(即使它是可选的).
你的getter不带参数,但是使用=>
运算符,返回一个带有可选参数的匿名函数.所以,obj.children
是一个功能; 因此该语句obj.children.length;
是错误的,因为函数没有该属性length
.
您可能无法省略括号,但如果get children
不是getter函数,您的代码将更自然地工作:
getChildren([roll]) { // null is the default value implicitly
if (roll == null || roll == 'any') return _children;
else return _children_by_roll[roll];
}
Run Code Online (Sandbox Code Playgroud)
用作:
obj.getChildren().length;
Run Code Online (Sandbox Code Playgroud)
要么:
obj.getChildren(rollObject).length;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1671 次 |
最近记录: |