如何将函数参数静态约束为所需类型的值的子集?
这组值将是在包中定义的一个小集合。如果它是编译时检查而不是运行时检查会很好。
我已经能够弄清楚的唯一方法是这样的:
package foo
// subset of values
const A = foo_val(0)
const B = foo_val(1)
const C = foo_val(2)
// local interface used for constraint
type foo_iface interface {
get_foo() foo_val
}
// type that implements the foo_iface interface
type foo_val int
func (self foo_val) get_foo() foo_val {
return self
}
// function that requires A, B or C
func Bar(val foo_iface) {
// do something with `val` knowing it must be A, B or C
}
因此,现在包的用户无法替换任何其他值来代替A,B或C。
package main
import "foo"
func main() {
foo.Bar(foo.A) // OK
foo.Bar(4) // compile-time error
}
但这似乎需要很多代码来完成这个看似简单的任务。我有一种感觉,我把事情搞得太复杂了,错过了语言中的一些功能。
该语言是否具有某些功能可以以简洁的语法完成相同的事情?
鸿蒙传说
眼眸繁星
相关分类