相关疑难解决方法(0)

元组在地图操作中解包

我经常发现自己与元组的列表,序列和迭代器一起工作,并希望做类似以下的事情,

val arrayOfTuples = List((1, "Two"), (3, "Four"))
arrayOfTuples.map { (e1: Int, e2: String) => e1.toString + e2 }
Run Code Online (Sandbox Code Playgroud)

但是,编译器似乎从不同意这种语法.相反,我最终写作,

arrayOfTuples.map { 
    t => 
    val e1 = t._1
    val e2 = t._2
    e1.toString + e2 
}
Run Code Online (Sandbox Code Playgroud)

这真是太傻了.我怎么能绕过这个?

iterator scala tuples map iterable-unpacking

72
推荐指数
5
解决办法
3万
查看次数

Scala:在函数参数中分解元组

在python我可以这样做:

def f((a, b)):
    return a + b

d = (1, 2)
f(d)
Run Code Online (Sandbox Code Playgroud)

这里传入的元组在传递给它时被分解f.

现在在scala我这样做:

def f(ab:(Int, Int)) : Int = {
    val (a, b) = ab
    a + b
}
val d = (1, 2)
f(d)
Run Code Online (Sandbox Code Playgroud)

我可以在这里做些什么,以便在传递参数时进行分解?只是好奇.

谢谢.

scala

57
推荐指数
2
解决办法
3万
查看次数

使用元组作为参数列表调用方法

我想知道最好的方法是什么.

val foo = Some("a")
val bar = Some(2)

def baz(a: String, b: Int) = if((b % 2) == 0) Some(a+","+b) else None

(x zip y) flatMap baz //does not compile of course
(x zip y) flatMap { x => baz(x._1, x._2) } //ugly
Run Code Online (Sandbox Code Playgroud)

我认为Odersky等人.在这个例子中,他们还有另一个技巧来降低噪音.

所以问题是如何在这里打击杂乱,假设你不允许改变baz(例如def baz(a: (String Int)))的实现.

syntax scala tuples

10
推荐指数
1
解决办法
3194
查看次数

在Scala中的参数列表中是否会直接支持元组解包?

在Haskell中你可以写:

x :: (Int,Int) -> Int
x (p,s) = p
Run Code Online (Sandbox Code Playgroud)

在Scala中你会写:

def x(a: (Int, Int)) = a._1
Run Code Online (Sandbox Code Playgroud)

要么:

def x(a: (Int, Int)) = a match {
    case (p, s) => p
}
Run Code Online (Sandbox Code Playgroud)

为什么不喜欢这样的东西

def x(_: (p: Int, s: Int)) = p
Run Code Online (Sandbox Code Playgroud)

要么

def x(foo: (p @ Int, s @ Int)) = p
Run Code Online (Sandbox Code Playgroud)

parameters scala tuples iterable-unpacking

10
推荐指数
1
解决办法
3267
查看次数

标签 统计

scala ×4

tuples ×3

iterable-unpacking ×2

iterator ×1

map ×1

parameters ×1

syntax ×1