是否可以获取具有默认参数的函数的函数引用,该默认参数指定为无参数调用?
InputStream.buffered()是一种扩展方法,可将a InputStream转换BufferedInputStream为8192字节的缓冲区大小。
public inline fun InputStream.buffered(bufferSize: Int = DEFAULT_BUFFER_SIZE): BufferedInputStream =
if (this is BufferedInputStream) this else BufferedInputStream(this, bufferSize)
Run Code Online (Sandbox Code Playgroud)
我想有效地使用默认参数引用扩展方法,并将其传递给另一个函数。
fun mvce() {
val working: (InputStream) -> InputStream = { it.buffered() }
val doesNotCompile: (InputStream) -> BufferedInputStream = InputStream::buffered
val alsoDoesNotCompile: (InputStream) -> InputStream = InputStream::buffered
}
Run Code Online (Sandbox Code Playgroud)
doesNotCompile并alsoDoesNotCompile产生以下错误
类型不匹配:推断的类型为KFunction2,但应为(InputStream)-> BufferedInputStream
类型不匹配:推断的类型为KFunction2,但应为(InputStream)-> InputStream
我知道错误是因为InputStream.buffered()实际上(InputStream) -> BufferedInputStream不是,而是的快捷方式(InputStream, Int) -> BufferedInputStream,将缓冲区大小作为参数传递给BufferedInputStream构造函数。
动机主要是样式方面的原因,我宁愿使用已经存在的引用,也不愿在最后一刻创建引用。
val ideal: (InputStream) -> BufferedInputStream = InputStream::buffered// …Run Code Online (Sandbox Code Playgroud) 我的数据库中有两个表:Person 和 Pet。
CREATE TABLE Person (
id INT NOT NULL,
PRIMARY KEY (id)
)
CREATE TABLE Pet (
id INT NOT NULL,
original_owner INT NOT NULL,
current_owner INT NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (original_owner)
REFERENCES Person(id),
FOREIGN KEY (current_owner)
REFERENCES Person(id)
)
Run Code Online (Sandbox Code Playgroud)
我试图参考每只宠物的前任主人和当前主人。我也尝试过
CREATE TABLE Pet (
id INT NOT NULL,
original_owner INT NOT NULL,
current_owner INT NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (original_owner, current_owner)
REFERENCES Person(id, id)
)
Run Code Online (Sandbox Code Playgroud)
和
CREATE TABLE Pet (
id INT …Run Code Online (Sandbox Code Playgroud) 这是一个完善的惯例,应避免使用魔法数字.但复杂的条件公式中的幻数呢?例如:
int result = 0;
if (level <= 50) {
result = (int) (Math.pow(level, 3) * (100 - level) / 50);
}
else if (level <= 68 && level > 50) {
result = (int) (Math.pow(level, 3) * (150 - level) / 100);
}
else if (level <= 98 && level > 68) {
result = (int) (Math.pow(level, 3) * ((1911 - 10 * level) / 3) / 500);
}
else if (level < 100 && level > 98) { …Run Code Online (Sandbox Code Playgroud) 我在 Eclipse 中使用 Maven 来管理我的项目,但认为 Gradle 看起来最终可能会给我带来更多好处。我正在尝试实现 CI/CD 管道,但想要检查某些事情(例如单元测试成功和代码覆盖率)。使用转换我的项目后
gradle eclipse
Run Code Online (Sandbox Code Playgroud)
我发现我无法再通过上下文菜单运行 JUnit 测试用例
Right Click -> Run As... -> JUnit Test
Run Code Online (Sandbox Code Playgroud)
出现以下错误
Class not found <package>.<class>
Run Code Online (Sandbox Code Playgroud)
但当我跑步时
gradle test
Run Code Online (Sandbox Code Playgroud)
它们全部通过,但不要给我任何更多信息(哪些已运行,哪些失败,哪些出错)。
通过切换到 Gradle 项目,现在所有任务都只能在 Gradle 上下文中运行吗?Eclipse 中没有报告任何错误,并且构建工作正常。我已验证这些文件位于预期位置。
我需要将内部旧版Web应用程序上的一些彩色图像转换为灰度图像。我认为最简单的方法是使用CSS过滤器。由于组策略,此应用程序的用户通过IE11访问它。该应用程序还必须使用Quirks(IE5)文档模式运行,否则会发生疯狂的事情(渲染问题,javascript无法正常工作等)。
我已经尝试了以下代码(以及来自here,here和here的代码)
img.desaturate {
-webkit-filter: grayscale(100%);
filter: gray;
filter: grayscale(100%);
filter: url(desaturate.svg#greyscale);
}
Run Code Online (Sandbox Code Playgroud)
没有任何效果。在此条件下(以IE5文档模式运行IE11),我可以做些什么来获取这些灰度图像,如果可以,怎么办?
注意:重新设计应用程序以使用更多现代技术目前尚无资金支持,并且将来也不会。
注意:由于有数以百万计的图像可用,因此使用某些脚本将每个图像转换为灰度并保存输出也不是一种选择。
链接到显示彩色Google徽标的示例:https : //jsfiddle.net/bq2mw5ya/2/