我正在使用Java代码中的一些Scala库.我的收藏有问题.我需要传递scala.collection.immutable.Map
作为方法的参数.我可以immutable.Map
从我的Java代码转换或构建,但我不知道如何做到这一点.建议?
在UISearchBar
不解雇时输入按下键盘或触摸用户别的地方.
我需要使用iOS键盘右下方的移除键盘按钮来移除键盘并调用:
- (void)searchBarTextDidEndEditing:(UISearchBar *)aSearchBar
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
我正在尝试使用一些带隐式参数的方法来定义一个类:
object Greetings {
def say(name: String)(implicit greetings: String): String = greetings + " " +name
}
Run Code Online (Sandbox Code Playgroud)
我从另一个班级使用这个班级
implicit val greetings = "hello" //> greetings : java.lang.String = hello
Greetings.say("loic") //> res0: String = hello loic
Greetings.say("loic")("hi") //> res1: String = hi loic
Run Code Online (Sandbox Code Playgroud)
我的问题是它只有在我的Greetings对象之外定义隐式val时才有效.我希望能够提供带有隐式参数的方法,在我的类中使用默认值,以便更容易地使用我的API(如Scala集合API).
所以我想这样做,但它不起作用(未找到隐含值):
object Greetings {
implicit val greetings = "hello"
def say(name: String)(implicit greetings: String): String = greetings + " " +name
}
Run Code Online (Sandbox Code Playgroud)
然后
Greetings.say("loic")
Greetings.say("loic")("hi")
Run Code Online (Sandbox Code Playgroud)
我知道我可以定义一个默认值,(implicit greetings: String = "hello")
但我想在类级别进行,以避免重复,如果有很多方法.
我想我错过了一些东西,因为我看到它CanBuildFrom
是在List …
为什么此代码会在Scala 2.9.2中引发类型不匹配错误?我期望getOrElse
返回类型,String
但实际上它返回java.io.Serializable
:
scala> implicit def StringToOption(s:String) = Option(s)
StringToOption: (s: String)Option[String]
scala> "a".getOrElse("")
res0: String = a
scala> var opt:Option[String] = "a".getOrElse("")
<console>:8: error: type mismatch;
found : java.io.Serializable
required: Option[String]
var opt:Option[String] = "a".getOrElse("")
^
Run Code Online (Sandbox Code Playgroud)
还行吧:
scala> implicit def StringToOption(s:String): Option[String] = Option(s)
StringToOption: (s: String)Option[String]
scala> var b:Option[String] = "a".getOrElse("") toString
b: Option[String] = Some(a)
Run Code Online (Sandbox Code Playgroud) 我在scala中编写以下隐式转换:
implicit def strToInt2(str: String):Int = {
str.toInt
}
Run Code Online (Sandbox Code Playgroud)
但它上升了这个编译错误:
<console>:9: error: type mismatch;
found : str.type (with underlying type String)
required: ?{val toInt: ?}
Note that implicit conversions are not applicable because they are ambiguous:
both method augmentString in object Predef of type (x: String)scala.collection.
immutable.StringOps
and method toi in object $iw of type (str: String)Int
are possible conversion functions from str.type to ?{val toInt: ?}
str.toInt
^
Run Code Online (Sandbox Code Playgroud)
如果我删除了返回类型,只需声明它:
implicit def strToInt2(str: String) = {
str.toInt
}
Run Code Online (Sandbox Code Playgroud)
它编译成功.谁能告诉我两者之间有什么区别?
切换到Scala 2.10后,我收到了大量的警告:
结构类型成员方法的反射访问...应该通过使隐式值language.reflectiveCalls可见来启用
这是什么意思?
在Excel(或OpenOffice Calc)中使用POISSON函数时,它需要两个参数:
并返回一个浮点数.
在Python(我尝试过RandomArray和NumPy)中,它返回一个随机泊松数的数组.我真正想要的是这个事件将发生的百分比(它是一个常数,并且数组每次都有不同的数字 - 所以它是一个平均数?).
例如:
print poisson(2.6,6)
Run Code Online (Sandbox Code Playgroud)
返回[1 3 3 0 1 3]
(每次运行它都会有所不同).
我从calc/excel得到的数字是3.19(POISSON(6,2.16,0)*100
).
我使用python的poisson错误(没有双关语!)或者我错过了什么?
就像问题一样.scala是否像Java一样推广它?或者它已经演变成Scala的惯用语?或者它变得无关紧要了?
POJO和JavaBeans含义:
此外,没有斯卡拉有意见(对不起,我不喜欢用这个词)上使用旧的public
,private
,protected
属性的设计,是有关这个问题的?
在Scala中,a Set
是一个函数:
trait Set[A] extends (A => Boolean)
Run Code Online (Sandbox Code Playgroud)
这使得不可能具有协变不可变Set
因为类型A
发生在逆变位置.相反Seq
,未定义为函数.关于为什么以这种方式设计集合和序列的问题已经有一些内容:
一个答案说,其原因是数学背景.但这个答案没有多解释.那么,定义一个Set
函数的具体优势是什么?如果以不同的方式实现它会有什么缺点?
我想在Scala中以递归方式反转列表列表.
我在Python中编写了深度列表反转,如下所示:
def deepReverse(items):
if type(items) == list:
return [deepReverse(item) for item in reversed(items)]
else:
return items
Run Code Online (Sandbox Code Playgroud)
我如何在Scala中完成相同的操作?问题不在于算法 - 它是类型的东西,我是新的.
我需要函数将[T]或List [List [T]]的列表,或T的列表和Ts列表,任意深度.我尝试根据我在其他地方看到的一个例子来创建一个案例类.我不想要一个只返回Any并接受Any的函数; 感觉像是作弊.
case class NL[+T](val v : Either[List[NL[T]],T])
Run Code Online (Sandbox Code Playgroud)
尽管如此,我还是无法让我的类型得到平衡.我是Scala的新手,但我认为这是一个混乱递归和打字的绝佳机会.
scala ×8
ios ×1
java ×1
list ×1
math ×1
objective-c ×1
poisson ×1
python ×1
recursion ×1
scala-2.10 ×1
statistics ×1