小编ear*_*las的帖子

Scala中的函数与方法

我正在观看Runar Bjarnason的初学者函数式编程,并在14:45他定义了一个方法:

def isDivisibleBy(k: Int): Int => Boolean = i => i % k == 0
Run Code Online (Sandbox Code Playgroud)

和功能:

val isEven = isDivisibleBy(2)
Run Code Online (Sandbox Code Playgroud)

定义isEven为函数而不是方法的优点和缺点是什么?

我已经阅读了Scala函数与方法以及Scala中方法和函数之间的区别,并且我理解语义差异,但我想知道在这种情况下是否有更深层次的原因为什么函数可能或可能不优于使用方法:

def isEven = isDivisibleBy(2)
Run Code Online (Sandbox Code Playgroud)

scala

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

并行运行ScalaTest测试

鉴于以下测试套件:

class ParallelizeMe extends FunSuite with BeforeAndAfterAll {

  override def beforeAll() = println("before")              
  override def afterAll()  = println("after")               

  test("test 1") {                                          
    println("1a")
    Thread.sleep(3000)                                      
    println("1b")                                           
  }

  test("test 2") {                                          
    println("2a")
    Thread.sleep(1000)                                      
    println("2b")
  }

} 
Run Code Online (Sandbox Code Playgroud)

如何并行运行测试(通过sbt)?理想情况下,我希望执行顺序在stdout上生成以下内容:

before
1a
2a
2b
1b
after
Run Code Online (Sandbox Code Playgroud)

scala sbt scalatest

15
推荐指数
1
解决办法
1万
查看次数

Scala中类似的curried类型之间的区别

以下两个函数的类型有什么区别?

def add1: Int => Int => Int = a => b => a + b
def add2(a: Int)(b: Int) = a + b
Run Code Online (Sandbox Code Playgroud)

根据他们的声明,他们似乎有相同的类型.两者都以相同的方式调用:

scala> add1(1)(2)
res2: Int = 3

scala> add2(1)(2)
res3: Int = 3
Run Code Online (Sandbox Code Playgroud)

但是,它们的类型存在明显差异:

scala> :t add1
Int => Int => Int

scala> :t add2
(a: Int)(b: Int)Int
Run Code Online (Sandbox Code Playgroud)

另外,部分应用add1比有点清洁add2.

scala> add1(1)
res4: Int => Int = <function1>

scala> add2(1)(_)
res5: Int => Int = <function1>
Run Code Online (Sandbox Code Playgroud)

scala

9
推荐指数
1
解决办法
258
查看次数

自动加入irssi中所有当前打开的频道

有没有办法告诉irssi我想自动加入当前打开的所有频道?

我想要的东西:

/channel add -auto <all my currently open channels>
/save
Run Code Online (Sandbox Code Playgroud)

irc irssi

5
推荐指数
2
解决办法
2996
查看次数

如何为事件检索“建议的新时间”?

TL; DR:当与会者为活动建议了新的时间时,组织者是否可以通过Google Calendar API检索建议的新时间,例如从Events:getEvents:list

流程示例

  1. 组织者邀请与会者参加1700 EDT的活动

    1700 EDT的组织者活动

  2. 与会者收到1500 MDT的活动邀请

    1500 MDT的与会者活动

  3. 与会者提出新的1530 MDT时间

    与会者单击“建议新的时间”

    与会者选择1530 MDT

    与会者看到新时间正在等待批准

  4. 组织者认为有一个建议的新时间

    组织者认为有一个建议的新时间可以批准

来自Google Calendar API的结果事件数据

当组织者通过“ 事件:获取”和“ 事件:列表” API 检索上述事件时,他们看到的只是与会者具有临时响应状态。没有什么可以表明已经提出了新的时间,也没有什么可以表明的:

{
  ...,
  "kind": "calendar#event",
  "organizer": {
    "email": "organizer@example.com",
    "self": true
  },
  "start": {
    "dateTime": "2019-09-17T17:00:00-04:00"
  },
  "end": {
    "dateTime": "2019-09-17T17:30:00-04:00"
  },
  "attendees": [
    {
      "email": "attendee@example.com",
      "responseStatus": "tentative"
    },
    {
      "email": "organizer@example.com",
      "organizer": true,
      "self": true,
      "responseStatus": "accepted"
    }
  ],
  ...
}
Run Code Online (Sandbox Code Playgroud)

google-calendar-api google-api google-apis-explorer

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

与泛型匹配的模式

给定以下类模式匹配:

clazz match {
  case MyClass => someMethod[MyClass]
}
Run Code Online (Sandbox Code Playgroud)

是否可以根据模式匹配的内容以通用方式引用MyClass?例如,如果我有MyClass的多个子类,我可以编写一个简单的模式匹配来将匹配的类型传递给someMethod:

clazz match {
  case m <: MyClass => someMethod[m]
}
Run Code Online (Sandbox Code Playgroud)

scala

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

Scala中的函数类型定义和类型擦除

给定以下类型和实例:

type operation = (Int, Int) => Int
def add: operation = _ + _
Run Code Online (Sandbox Code Playgroud)

如果我尝试匹配case语句中的操作,Scala会因为类型擦除而抱怨未经检查的键入:

for (a <- elements) a match {
  case o: operation => // do stuff
}
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这种基于函数的打字,同时在case语句中易于擦除?

注意,这与此线程类似.

scala

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