在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) 通常Xcode构建变得混乱,所以我经常使用Clean并重新制作Build项目.该项目依赖于几个开源项目,由cocoapod管理.
问题是,当我使用时Clean ⇧⌘K,整个工作区被清理,因此所有的cocoapod依赖项都会被重建,这需要大部分的构建时间.但在大多数情况下,我只想要清理我自己的项目.我该怎么做呢?
我正在编写一个 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不是一个选择。
我们来看下面的代码:
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在这种情况下,只有最后一个语句被视为按名称调用参数.我无法理解这种差异背后存在什么样的理由.
我构建了一个用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,那将是一个同样有效的解决方案.
我写了一个函数做简单的数学运算:
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) scala ×3
android ×1
callbyname ×1
javascript ×1
parameters ×1
proguard ×1
types ×1
typescript ×1
workspace ×1
xcode ×1