Dart扩展字符串类型以进行类型检查

7
我可以帮你进行翻译,以下是需要翻译的内容:

我正在使用Dart,并希望利用静态类型检查,通过(某种方式)扩展String类(我知道你不能这样做)。
假设我有:

 void putInfo(String PersonName,String GroupName){

当然,我可能会意外地使用错误的方式调用它。
 putInfo("grade2","Fred Bloggs");

是否可以定义诸如“人名”和“组名”等类型,以便拥有

void putInfo(Personname name,Groupname group){

如何捕捉这样的错误?当然,这也适用于整数(宽度-int与高度-int)、日期等。
提前致谢
祝好
史蒂夫

2个回答

4

例如,在Go中非常容易实现,但在Dart中唯一能做的就是创建一个新类。

如果有很多这样的类并且经常使用它们,这可能会严重影响性能。

您无法实现多个运算符,因为只有其中一些可以有自定义实现。

总的来说,我不建议在Dart中这样做。


2
我知道我不应该只说谢谢 (呃,我想是这样的), 但无论如何还是要感谢你,以及之前给予我的帮助和建议。一直受用不尽。史蒂夫 - Lymp

3

你不能按照自己想要的方式扩展String,但是对于你的目的来说应该不需要。

你可以使用命名参数来区分相同类型的参数:

void putInfo({String personName, String groupName})

接着调用它:

putInfo(personName: 'Fred Bloggs', groupName: 'grade2')

这种方法的一个缺点是命名参数是可选的,所以现在可以不带任何参数调用putInfo。另一个问题是这只是一个有用的提示,并不能阻止某人使用错误的参数调用putInfopersonName: 'grade2)。
更好的方法可能是对参数执行一些验证:
void putInfo(String personName, String groupName) {
  assert(personName.contains(' '));
  assert(!groupName.contains(' '));
  // More asserts validating that your arguments are correct 
}

你可以结合这两种方法,使用命名参数进行提示,然后使用断言来捕获使用错误参数调用方法的情况。

请注意,第一个缺点已经不再是真的了:您现在可以将参数指定为“必需的”,以确保其被定义。 - Will59

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接