我对 TypeScript 有点陌生,但我对 Java 很了解。每当需要满足函数接口时,最常见的是使用 lambda 表达式 ( ->) 或方法引用 ( ::) 来完成。
Lambda 表达式在两种语言之间似乎是等效的(如果我错了,请纠正我)。有没有办法利用方法引用?
当目标是实现这一点时:
this.entryService.getEntries()
.subscribe(entries => this.listUpdateService.send(entries));
Run Code Online (Sandbox Code Playgroud)
有没有办法使用函数引用?下面的做法似乎是错误的,因为send不在 的范围内执行this.listUpdateService。(顺便说一句,它在哪个范围内执行?)
this.entryService.getEntries()
.subscribe(this.listUpdateService.send);
Run Code Online (Sandbox Code Playgroud) 我知道局部变量在未设置时可以具有"随机"值,但是用指针设置局部变量的第一个值是不是很糟糕?例如:
void setValue(int* p_val)
{
*p_val = …; /* Assignment does not use *p_val */
}
int main(void)
{
int val;
setValue(&val);
printf("%d", val);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
其中setValue仅设置并且从不读取引用变量的值.Splint警告我val是"在定义之前使用",我对这个警告有点惊讶,因为我相信在执行printf之前设置val的值并使用val.夹板是否不够先进,无法识别用于设置初始值的参考?
我想向流的元素添加上下文。我知道我可以映射到一个包含要添加的元素和上下文的列表,但它似乎有点臃肿(计算/内存开销)并且不够灵活(类型丢失)。我知道我可以做这样的事情:
public record Tuple<A, B> (A a, B b) {}
Run Code Online (Sandbox Code Playgroud)
然后,例如:
stream // Stream<Foo>
.map(foo -> new Tuple<>(foo, getContext(foo)); // Stream<Tuple<Foo, FooContext>>
Run Code Online (Sandbox Code Playgroud)
但是是否有一个最佳实践,或者甚至是一个开销很少的标准实现?
java ×2
c ×1
definition ×1
java-stream ×1
lambda ×1
pointers ×1
scope ×1
splint ×1
typescript ×1