我试图使用函数中的返回类型来返回对象或字符串。如果它是一个对象,我想开始从这个对象调用html" target="_blank">方法。如果它是一个字符串,我想在其他地方调用一些其他函数。我一直挂断电话,因为返回的对象不是我要返回的对象,它是“left”类型,我似乎无法将该对象从“left”类型恢复到我想要的“Player”类型。这包含在扩展可变队列的对象中。下面是我的函数,它根据ActionQueue对象中的键在地图中查找Player对象:
def popCurrentAction : Either[Player, String] = {
val currentAction = this.dequeue
this.enqueue(currentAction)
if (playerMap.get(currentAction) != None) {
Left((playerMap.get(currentAction).get))
}
else {
Right(currentAction)
}
}
这是我的函数,它试图使用返回“Player”对象或字符串的函数。
def doMove = {
var currentAction = ActionQueue.popCurrentAction
if (currentAction.isLeft) {
var currentPlayer = currentAction.left
var playerDecision = currentPlayer.solicitDecision() // This doesn't work
println(playerDecision)
}
else {
// Do the stuff if what's returned is a string.
}
}
我已经尝试过使用. fold函数,它确实允许我调用par的决策函数并获取它返回的内容,但我想直接使用Player对象。当然这是可能的。有人能帮忙吗?
var currentPlayer = currentAction
var playerDecision = currentPlayer.fold(_.solicitDecision(), _.toString())
// This is close but doesn't give me the object I'm trying to get!
println(playerDecision)
区分大小写并同时提取内容的最佳方法是使用模式匹配。
在您的情况下,大致是以下代码:
def doMove = {
val currentAction = ActionQueue.popCurrentAction
currentAction match {
case Left(currentPlayer) =>
val playerDecision = currentPlayer.solicitDecision()
println(playerDecision)
case Right(string) =>
println(string)
}
}
另请注意,我使用了val
而不是var
。当您有一个不打算更改的变量时,val
是更好的样式(粗略地说,它使一个只读变量)。
您还没有说明您遇到了什么错误,只是“这不起作用”,而且您发布的代码还不够完整,无法进行编译和测试。当编译器失败时,currentPlayer的类型是什么?
话虽如此,您可以考虑重构代码。
def doMove = ActionQueue.popCurrentAction.fold(getDecision, stringStuff)
def getDecision(player: Player) = ....
def stringStuff(str: String) = ....
问题内容: 我们正在开发对延迟敏感的应用程序,并且已经对各种方法(使用jmh)进行了微基准测试。在对基准测试方法进行微基准测试并对结果满意之后,我实现了最终版本,但发现最终版本比我基准测试的 速度慢 了 3倍 。 罪魁祸首是所实现的方法正在返回一个对象而不是一个对象。这是基准代码的简化版本: 以上基准测试结果: 只需更改函数的返回类型,就可以将性能提高近三倍。 我认为返回枚举对象与整数之间的唯一区
条款23: 必须返回一个对象时不要试图返回一个引用 据说爱因斯坦曾提出过这样的建议:尽可能地让事情简单,但不要过于简单。在c++语言中相似的说法应该是:尽可能地使程序高效,但不要过于高效。 一旦程序员抓住了“传值”在效率上的把柄(参见条款22),他们会变得十分极端,恨不得挖出每一个隐藏在程序中的传值操作。岂不知,在他们不懈地追求纯粹的“传引用”的过程中,他们会不可避免地犯另一个严重的错误:传递一个
我正在编写一个自定义配置单元UDF来根据属性文件中定义的值解析映射中的键/值对。正在验证的格式(map ,String)。目的是让第一个参数是要计算的映射,第二个参数包含属性文件。 我遇到的问题是,GenericUDF类似乎希望这两个值对查询都是动态的,因为initialize()函数将参数转换为ObjectInspectors,从外观上看,这没有可能的选项来返回它们所检查的对象。 我希望init
很多人都说不应该完全否定 Window,Windows 也有它的长处。不应该骂微软。 对。Windows 容易操作,适合普通用户。如果微软把它自己定位在 P&G,Philips 那样的地位,能够给我们的百姓提供周到的,完善的,价廉物美的服务。那我肯定是很喜欢它的。 但是从上面的种种情况说明,微软是一个野心极大的国际垄断组织!它的产品没有一个是不出问题的:Windows 不稳定,容易中病毒,而微软不
条款31: 千万不要返回局部对象的引用,也不要返回函数内部用new初始化的指针的引用 本条款听起来很复杂,其实不然。它只是一个很简单的道理,真的,相信我。 先看第一种情况:返回一个局部对象的引用。它的问题在于,局部对象 ----- 顾名思义 ---- 仅仅是局部的。也就是说,局部对象是在被定义时创建,在离开生命空间时被销毁的。所谓生命空间,是指它们所在的函数体。当函数返回时,程序的控制离开了这个空
本文向大家介绍PHP引用返回,包括了PHP引用返回的使用技巧和注意事项,需要的朋友参考一下 示例 有时,您有时需要隐式返回引用。 当您想使用函数查找引用应绑定到哪个变量时,按引用返回非常有用。不要使用引用返回来提高性能。引擎将自动自动对此进行优化。仅在有充分的技术理由时才返回引用。 取自PHP文档,供按引用返回。 通过引用返回可以采用许多不同的形式,包括以下示例: 通过引用返回不仅限于函数引用。您