哦,Xcode!
我受到了阻碍.如果我创建一个Mac OS Cocoa应用程序,我会免费获得一个单元测试目标.但是我想编写一个命令行工具(甚至是一个可以链接到命令行工具的库)并编写一些单元测试.如果我能搞清楚的话,我会被愚弄.
我已经足够远了,我有一个命令行目标和一个测试目标.我可以"@testable import"我的commnd line模块并使用测试代码中的代码而Xcode中没有错误.但是,一旦我尝试运行我的测试(Cmd-U),我就会收到链接错误.主模块中的所有类都不能链接.什么?
我已经搞砸了好几个小时了,伟大的谷歌一直没有帮助.(我正在使用Xcode 7,而Xcode 6似乎非常不同.)任何人都可以帮助我吗?
谢谢.
我试图使用反射从地图中删除一个键,我找不到办法.我错过了什么?我有以下代码(http://play.golang.org/p/7Et8mgmSKO):
package main
import (
"fmt"
"reflect"
)
func main() {
m := map[string]bool{
"a": true,
"b": true,
}
delete(m, "a")
fmt.Printf("DELETE: %v\n", m)
m = map[string]bool{
"a": true,
"b": true,
}
m["a"] = false
fmt.Printf("ASSIGN: %v\n", m)
m = map[string]bool{
"a": true,
"b": true,
}
v := reflect.ValueOf(m)
v.SetMapIndex(reflect.ValueOf("a"), reflect.Zero(reflect.TypeOf(m).Elem()))
fmt.Printf("REFLECT: %v\n", m)
}
Run Code Online (Sandbox Code Playgroud)
这会产生输出:
DELETE: map[b:true]
ASSIGN: map[a:false b:true]
REFLECT: map[a:false b:true]
Run Code Online (Sandbox Code Playgroud)
如您所见,反射情况似乎与指定零值相同,而不是删除它.这似乎与reflect.SetMapIndex()的文档相反(http://golang.org/pkg/reflect/#Value.SetMapIndex):
如果val为零值,则SetMapIndex将从地图中删除该键.
对于我的应用程序,我需要从地图中删除密钥.有任何想法吗?
我敢肯定我一定错过了什么.
我是Haskell的新手,曲线非常陡峭.我正在达到我的玩具项目的重点,我真的想要使用State monad来避免在任何地方传递一千个论点.我无法理解如何将IO中的State monad传递给纯代码.概念上像这样的东西(除了StateT而不是ExceptT):
import Control.Monad.Except
import Control.Monad.Identity
type PlayM = Except String
type PlayMIO = ExceptT String IO
puree :: String -> PlayM String
puree = return . ("bb"++)
impuree :: String -> PlayMIO String
impuree s = do
a <- return $ runIdentity $ runExceptT $ puree s
return $ "aa" ++ a
main = do
runExceptT $ impuree "foo"
putStrLn "hi"
Run Code Online (Sandbox Code Playgroud)
除了这不编译,给我这样的东西:
play.hs:15:20:
Couldn't match expected type ‘[Char]’
with actual type ‘Either String String’
In the second …Run Code Online (Sandbox Code Playgroud) 这个(大大简化了)的代码无法为我编译。不知道为什么。返回类型是Entry?和null似乎是一个有效的值给我。
val foo = BiFunction<Int, List<Entry>, Entry?> { foo:Int, bar:List<Entry> ->
null
}
Run Code Online (Sandbox Code Playgroud)
错误消息是 Null can not be a value of a non-null type Entry
谁能告诉我我所缺少的吗?
我在用:
ext.kotlin_version = '1.2.10'
compile "io.reactivex.rxjava2:rxjava:2.1.8"
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
Run Code Online (Sandbox Code Playgroud)
我欢迎任何建议。新年快乐!
我有一个 String? 类型的属性。我可以很好地 @Inject 值,直到我尝试向属性添加 @Named 属性。如果我使用“字符串”而不是可以为空的字符串,一切也都可以正常工作,但该值可以为空,所以我需要“?”。
在我的模块中,我有:
@Provides
@Named("someStringOrNull")
fun provideSomeStringOrNull(): String? = "STRING OR NULL"
Run Code Online (Sandbox Code Playgroud)
在我的活动中,我有:
@set:Inject
@set:Named("someStringOrNull")
var someStringOrNull: String? = null
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Error:(11, 2) error: java.lang.String cannot be provided without an @Inject constructor or from an @Provides- or @Produces-annotated method.
public abstract void inject(@org.jetbrains.annotations.NotNull()
^
java.lang.String is injected at
com.scrawlsoft.daggerwoes.MainActivity.setSomeStringOrNull(p0)
com.scrawlsoft.daggerwoes.MainActivity is injected at
com.scrawlsoft.daggerwoes.AppComponent.inject(target)
Run Code Online (Sandbox Code Playgroud)
如果我删除 @Named attr,效果很好,所以我相当确定“@set:”是正确的,但我可能会弄错。
关于如何开展这项工作有什么建议吗?(目前,我正在考虑将其包装在自定义类中,这样我就不需要 @Named,但这对我来说似乎很浪费。)
完整的源代码可以在以下位置找到: https: //github.com/gmadrid/DaggerWoes/tree/master/app/src/main/java/com/scrawlsoft/daggerwoes
感谢您的帮助。