小编poc*_*all的帖子

Scala - 'for-yield'条款对某些条件没有任何影响吗?

在Scala语言中,我想编写一个在给定范围内产生奇数的函数.迭代偶数时,该函数会打印一些日志.该函数的第一个版本是:

def getOdds(N: Int): Traversable[Int] = {
  val list = new mutable.MutableList[Int]
  for (n <- 0 until N) {
    if (n % 2 == 1) {
      list += n
    } else {
      println("skip even number " + n)
    }
  }
  return list
}
Run Code Online (Sandbox Code Playgroud)

如果省略打印日志,则实现变得非常简单:

def getOddsWithoutPrint(N: Int) =
  for (n <- 0 until N if (n % 2 == 1)) yield n
Run Code Online (Sandbox Code Playgroud)

但是,我不想错过记录部分.如何更紧凑地重写第一个版本?如果它可以被重写类似于这将是伟大的:

def IWantToDoSomethingSimilar(N: Int) =
  for (n <- 0 until N) if (n % 2 == 1) yield …
Run Code Online (Sandbox Code Playgroud)

scala yield-keyword

12
推荐指数
2
解决办法
8760
查看次数

在Xcode中,如何清理工作区中的一个项目

通常Xcode构建变得混乱,所以我经常使用Clean并重新制作Build项目.该项目依赖于几个开源项目,由cocoapod管理.

问题是,当我使用时Clean ⇧⌘K,整个工作区被清理,因此所有的cocoapod依赖项都会被重建,这需要大部分的构建时间.但在大多数情况下,我只想要清理我自己的项目.我该怎么做呢?

workspace xcode

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

从 Typescript 中的 http url 导入 ES6 模块

我正在编写一个 ES6 模块,它依赖于使用 http url 指定的其他 ES6 模块,如下所示:

import { el, mount } from "https://cdnjs.cloudflare.com/ajax/libs/redom/3.26.0/redom.es.js";
const pElem = el("p") // definitely works in Javascript
Run Code Online (Sandbox Code Playgroud)

当我尝试在 Typescript 中翻译我的模块时,出现以下错误:

找不到模块“https://cdnjs.cloudflare.com/ajax/libs/redom/3.26.0/redom.es.js”或其相应的类型声明。

我正在使用ts-watchnpm 模块来编译 Typescript,除非我不使用importfrom ,否则它工作正常https://...

我还知道,如果我尝试导入 npm 模块(例如import {el} from "redom"),它也可以工作。但我正在写的是一个用于 Web 浏览器的模块,而不是 npm 的模块。因此,使用webpack不是一个选择。

javascript typescript

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

对call-by-name参数的Scala隐式转换的工作方式不同,具体取决于函数是否过载

我们来看下面的代码:

import scala.language.implicitConversions
class Foo
implicit def int2Foo(a: => Int): Foo = new Foo
def bar(foo: Foo) = {}
def bar(foo: Boolean) = {}
bar {
  println("Hello")
  64
}
Run Code Online (Sandbox Code Playgroud)

此代码不显示任何信息,因为该块包含println("Hello")被视为=> Int它转化为Foo通过int2Foo.但是如果省略重载函数,就会发生令人惊讶的事情bar(foo: Boolean)

import scala.language.implicitConversions
class Foo
implicit def int2Foo(a: => Int): Foo = new Foo
def bar(foo: Foo) = {}
bar {
  println("Hello")
  64
}
Run Code Online (Sandbox Code Playgroud)

这会打印,Hello因为它会对块进行求值,64在这种情况下,只有最后一个语句被视为按名称调用参数.我无法理解这种差异背后存在什么样的理由.

scala implicit-conversion callbyname

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

android-maven-plugin:不删除SharedPreferences的deploy方法

我构建了一个用android-maven-plugin设置的android项目.当我执行android:deploy并运行程序时,SharedPreferences总是初始化.

有没有办法将我的项目部署到AVD而不删除SharedPreferences存储?

PS

我使用Intellij IDEA并注意到它的原生android运行/调试支持不会删除SharedPreferences.但是,在我的项目中添加scala支持后,IDE在运行应用程序时报告"Too many methods:112423; max is 65536"错误.也许是因为缺乏预处理预处理.如果有一种方法可以在运行带有Intellij IDEA android支持的Android应用程序之前应用proguard,那将是一个同样有效的解决方案.

android proguard sharedpreferences

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

Scala 对基本类型数值运算的专门化

我写了一个函数做简单的数学运算:

def clamp(num: Double, min: Double, max: Double) =
  if (num < min) min else if (num > max) max else num
Run Code Online (Sandbox Code Playgroud)

它非常简单,直到我需要具有 Long 类型的相同功能。我用类型参数和专业化来概括它:

import Ordering.Implicits._
def clamp[@specialized N: Ordering](num: N, min: N, max: N) =
  if (num < min) min else if (num > max) max else num
Run Code Online (Sandbox Code Playgroud)

它有效,但我发现字节码在幕后做了很多装箱和拆箱操作:

public boolean clamp$mZc$sp(boolean num, boolean min, boolean max, Ordering<Object> evidence$1)
{
  return Ordering.Implicits..MODULE$.infixOrderingOps(BoxesRunTime.boxToBoolean(num), evidence$1).$greater(BoxesRunTime.boxToBoolean(max)) ? max : Ordering.Implicits..MODULE$.infixOrderingOps(BoxesRunTime.boxToBoolean(num), evidence$1).$less(BoxesRunTime.boxToBoolean(min)) ? min : num;
}

public byte clamp$mBc$sp(byte num, byte …
Run Code Online (Sandbox Code Playgroud)

parameters types scala specialization

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