我在映射带有可选参数的函数时遇到问题.如果参数不是可选的,我会得到相同的类型错误.这是一个简单的说明:
scala> def multiple(m: Int, n: Int = 2) = m * n
multiple: (m: Int,n: Int)Int
scala> multiple(5)
res0: Int = 10
scala> multiple(5, 7)
res1: Int = 35
scala> (1 to 10).map(multiple)
<console>:7: error: type mismatch;
found : (Int, Int) => Int
required: (Int) => ?
(1 to 10).map(multiple)
Run Code Online (Sandbox Code Playgroud)
这是使其工作的一种方法,但它需要重复默认参数,这是一个维护噩梦:
scala> (1 to 5).map { n => multiple(n, 2) }
res6: scala.collection.immutable.IndexedSeq[Int] = Vector(2, 4, 6, 8, 10)
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法呢?更一般地说,为什么带有可选参数的函数看起来与参数不可选时的类型相同?实际的类型是multiple什么?
当我从C++调用NSLog时,Xcode抱怨传递给NSLog的格式字符串不是文字字符串.这是触发警告的一行代码:
NSLog(CFSTR("Leaking?"));
Run Code Online (Sandbox Code Playgroud)
我不知道的任何方式代码C++文字的NSString,我没有看到相关的警告,我可以在项目设置中关闭.有没有办法从C++调用NSLog而不触发此消息?我正在使用Xcode 4.2.1.
编辑:这真的是C++代码.我通常避免使用Objective-C++,坚持使用Objective-C或普通的旧C++,因为没有官方文档说明Objective-C++中哪些有用,哪些没有.我只发现模糊的警告(例如)STL的某些部分可能存在问题.我使用模板,STL和C++的其他"高级"功能,所以我想安全地玩它.
编辑#2,解决方案:我只是想通了clang支持的警告标志比实际记录的要多得多.(从Xcode提供给我的长长的警告列表中可以看出这一点.)我尝试了-Wno-format-nonliteral a la gcc,现在Xcode很高兴.