我希望能够做到这一点
class MyFunc extends ((s: string) => boolean) { ... }
Run Code Online (Sandbox Code Playgroud)
这样一个实例MyFunc可以用作一个函数,它接受一个字符串作为输入并返回一个布尔值,如下所示:
const f = new MyFunc();
const b: boolean = f('someString');
Run Code Online (Sandbox Code Playgroud)
这在TypeScript中是否可行?
在Scala等语言中,可以扩展类型String => Boolean,并提供apply实现此目的的方法.
class MyFunc extends (String => Boolean)
val f = new MyFunc()
val b: Boolean = f("someString")
Run Code Online (Sandbox Code Playgroud) 在Scala中,如果你创建一个类型类,比如代数结构Monoid[T],你可以为不同类型的monoid提供许多默认的类型类实现.
假设一个monoid定义为:
trait Monoid[T] {
def op(x: T, y: T): T
def id: T
}
Run Code Online (Sandbox Code Playgroud)
由于String串联操作下的s形成一个monoid,我们可以为这样的Strings 提供一个默认的monoid :
implicit object StringMonoid extends Monoid[String] {
override def op(a: String, b: String): String = a + b
override def id: String = ""
}
Run Code Online (Sandbox Code Playgroud)
这很容易,因为String它不是通用类型.
我要求的是如何为Seq[T]s 提供一个默认的monoid,其中type参数阻止我像上面那样创建一个隐式对象.
我可以:
class SeqMonoid[T] extends Monoid[Seq[T]] {
override def op(a: Seq[T], b: Seq[T]): Seq[T] = a ++ b
override def id: Seq[T] = Nil …Run Code Online (Sandbox Code Playgroud) 说我有以下字符串:
old_string = "I love the number 3 so much"
Run Code Online (Sandbox Code Playgroud)
我想发现整数(在上面的例子中,只有一个数字3),并用一个大于1的值替换它们,即,期望的结果应该是
new_string = "I love the number 4 so much"
Run Code Online (Sandbox Code Playgroud)
在Python中,我可以使用:
r = re.compile(r'([0-9])+')
new_string = r.sub(r'\19', s)
Run Code Online (Sandbox Code Playgroud)
9在匹配的整数数字的末尾追加一个.但是,我想申请更一般的内容\1.
如果我定义一个函数:
def f(i):
return i + 1
Run Code Online (Sandbox Code Playgroud)
我该如何申请f()上\1,这样我可以在更换匹配的字符串old_string喜欢的东西f(\1)?