我对Scala很新,但我已经爱上了它.我已经阅读了有关部分功能的教程和文章.我想要实现的是让一个对象扩展PartialFunction [...,...]并直接用case定义它,而不需要定义isDefinedAt和apply方法.
例如
val partialfuncval : PartialFunction[Int,Boolean] = {
case 1 => false
}
Run Code Online (Sandbox Code Playgroud)
是部分函数的有效定义.但为什么我不能写
object PartialFunctionClass extends PartialFunction[Int,Boolean] {
case 1 => false
}
Run Code Online (Sandbox Code Playgroud)
?这将取消定义isDefinedAt和apply的需要,并且会使得编写某些类的类(由我正在使用的lib预定义)类型更容易.
我有一个使用 minSDK 21 的 multidex 项目,使用 gradle 4.5.1 和 gradle 插件 3.0.1。我的问题是,即使没有任何源文件更改,当我尝试组装并部署到手机时,也会执行编译任务。当我运行时,--info我得到以下原因:
任务“:app:compileStandardDebugJavaWithJavac”不是最新的,因为:输入属性“源”文件C:... \ app \ build \ generated \ source \ buildConfig \ standard \ debug [package] \ BuildConfig.java已更改。输入属性“源”文件 C:...\app\build\ generated\source\dataBinding\standard\debug\android\databinding\layouts\DataBindingInfo.java 已更改。
您能帮助我确定什么可能导致这些文件发生更改并导致重新编译吗?我相信数据绑定源要么不应该在不更改源的情况下更改,要么不应该影响编译任务是否是最新的。BuildConfig.java 也是如此。
我有 gradle 缓存、按需配置并启用了守护进程。
这是该应用程序build.gradle:
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
android {
compileSdkVersion 26
buildToolsVersion "26.0.2"
defaultConfig {
minSdkVersion 21
targetSdkVersion 25
applicationId 'package'
// for automated testing
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
vectorDrawables.useSupportLibrary = true
buildConfigField "boolean", "PUBLIC_RELEASE", 'false'
}
dataBinding …Run Code Online (Sandbox Code Playgroud)