小编Dus*_*009的帖子

Scala中的条件隐式函数

我正在尝试在Scala中设计DSL.为此,我想在精确的字符串上创建一个隐式函数.我知道要为任何String创建一个隐式函数,我可以写:

class StringPlus(str: String) {
    def some_function(): Unit = do_something
}
implicit def string2StringPlus(str: String) = new StringPlus(str)
Run Code Online (Sandbox Code Playgroud)

但我不知道如何修改它只为某些字符串创建这个隐式函数.是否可以为隐式函数赋予布尔条件,以便仅在布尔条件为真时才创建隐式函数(例如,如果字符串的长度为5或更大,如果字符串的第一个字母是字母"a"等)并不是所有的字符串?

string dsl scala implicit implicit-conversion

5
推荐指数
1
解决办法
355
查看次数

Scala DSL:如何添加"无"的单词?

我尝试构建一个简单的隐式类Int来为Ints添加一个函数:

object Helper {
  implicit class IntHelper(i: Int) {
    def add(str: String): Int = i + str.toInt
  }
}
Run Code Online (Sandbox Code Playgroud)

为了更自然地写,我希望DSL允许这个(带import Helper._):

2 add "3" and add "4"
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何做这个and功能.我认为这个会起作用:

object Helper {
  implicit class IntHelper(i: Int) {
    def add(str: String): Int = i + str.toInt
    def and: Int = i
  }
}
Run Code Online (Sandbox Code Playgroud)

但是如果没有括号,它就无法工作(事实上,"2.add("3").and.add("4")但有效,但是对于DSL来说,有太多的句号和括号).

谢谢

dsl scala implicit

4
推荐指数
1
解决办法
90
查看次数

销毁一个分离的线程 (POSIX)

我只是想知道,如果我使用一个属性和"pthread_attr_setdetachstate"带有参数的函数创建一个分离线程 (POSIX) PTHREAD_CREATE_DETACHED,我是否必须在程序结束时销毁该线程?

我知道我必须销毁为创建分离线程而创建的属性,但对于线程本身,我真的不知道。

c linux multithreading pthreads pthread-join

3
推荐指数
1
解决办法
1327
查看次数

Scala:将字符串拆分为两个整数

这是我目前的代码.我想将一个字符串拆分为两个整数并将它们存储到变量中.

val line = "1 2"
var a = 0
var b = 0
val c = line.split(" ") match { case Array(x,y) => (x.toInt, y.toInt) }
a = c._1
b = c._2
Run Code Online (Sandbox Code Playgroud)

有没有办法在Scala中做这样的事情?这更加紧凑.

(a,b) = line.split(" ") match { case Array(x,y) => (x.toInt, y.toInt) }
Run Code Online (Sandbox Code Playgroud)

表达式line.split("")匹配{case Array(x,y)=>(x.toInt,y.toInt)}返回一个整数的tupple所以我认为直接将两个整数与变量a和b联系起来工作.

split scala

2
推荐指数
1
解决办法
2656
查看次数

Scala:生成Ints元组

我想生成一个两个Int元组的Vector.现在,我做如下:

(0 until 100).map(x => (x+1 until 100).map(y => (x,y))).flatten.filter { ... }
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更有效的方法来做到这一点.我觉得"扁平化"会减慢代码的速度.我必须使用"展平"还是可以使用其他东西?

PS1:如果我不使用"flatten",我有:Vector(Vector(a,b),Vector(c,d),...)而不是Vector((a,b),(c,d) ,...).

PS2:我在第二个生成器中使用(x + 1到100)因为我对元组(a,b)和(b,a)不感兴趣.

scala vector flatten

0
推荐指数
1
解决办法
139
查看次数