我有一个我要表达的声明,在C伪代码中看起来像这样:
switch(foo):
case(1)
if(x > y) {
if (z == true)
doSomething()
}
else {
doSomethingElse()
}
return doSomethingElseEntirely()
case(2)
essentially more of the same
Run Code Online (Sandbox Code Playgroud)
使用scala模式匹配语法是一种很好的方法吗?
我试图在新的Scala 2.10 期货功能上重现这个例子.我使用的代码是:
import scala.concurrent.Future
import scala.concurrent.future
object Test {
def main(args: Array[String]) {
println("Test print before future")
val s = "Hello"
val f = future {s + " future!"}
f onSuccess {case v => println(v)}
println("Test print after future")
}
}
Run Code Online (Sandbox Code Playgroud)
而不是打印:
Test print before future
Hello future!
Test print after future
Run Code Online (Sandbox Code Playgroud)
它只是打印:
Test print before future
Test print after future
Run Code Online (Sandbox Code Playgroud)
知道为什么我有这种行为吗?我的scala编译器版本是2.10.0-20120507.
我正在移动我在Scala的第一步,我想使以下代码工作:
trait Gene[+T] {
val gene: Array[T]
}
Run Code Online (Sandbox Code Playgroud)
编译器给出的错误是: covariant type T occurs in invariant position in type => Array[T] of value gene
我知道我可以这样做:
trait Gene[+T] {
def gene[U >: T]: Array[U]
}
Run Code Online (Sandbox Code Playgroud)
但这并没有解决问题,因为我需要一个价值:实际上我想说的是"我不关心内部类型,我知道基因会有一个返回其内容的基因字段".(这里的+ T是因为我想做类似的东西type Genome = Array[Gene[Any]],然后用它作为单个基因类的包装器,所以我可以有一个异构数组类型)是否有可能在Scala中执行它或者我只是采取了错误的方法?使用不同的结构会更好吗,比如Scala本地协变类?
提前致谢!
PS:我也尝试过类和抽象类而不是特性,但总是一样的结果!
编辑:由迪迪埃杜邦的善意建议我来到这个代码:
package object ga {
class Gene[+T](val gene: Vector[T]){
def apply(idx: Int) = gene(idx)
override def toString() = gene.toString
}
implicit def toGene[T](a: Vector[T]) = new Gene(a)
type Genome = Array[Gene[Any]]
}
Run Code Online (Sandbox Code Playgroud)
package test
import ga._
object Test …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Clojure中使用BigDecimals来模拟(如果需要)任意精度数字.当我尝试从未缩放的值和比例因子实例化BigDecimal时,我有一个奇怪的错误:
user=> 1.31M
1.31M (OK)
user=> (class 1.31M)
java.math.BigDecimal (OK)
user=> (.unscaledValue 1.31M)
131 (OK)
user=> (.scale 1.31M)
2 (OK)
user=> (.movePointLeft (BigDecimal. 131) 2)
1.31M (OK)
user=> (BigDecimal. (BigInteger. "131") 2)
1.31M
user=> (BigDecimal. 131N 2) (WRONG!!!)
IllegalArgumentException No matching ctor found for class java.math.BigDecimal clojure.lang.Reflector.invokeConstructor (Reflector.java:183)
user=> (BigDecimal. (BigInteger. "131") 2)
1.31M
Run Code Online (Sandbox Code Playgroud)
这里的问题是clojure大整数不是java.math.BigInteger对象.偶数(bigint x)不起作用:
user=> (doc bigint)
-------------------------
clojure.core/bigint
([x])
Coerce to BigInt
nil
Run Code Online (Sandbox Code Playgroud)
顺便说一句,BigInteger构造函数不直接接受数值.我知道我也可以这样做:
user=> (BigDecimal. (BigInteger. (.toByteArray (.unscaledValue 1.31M))) (.scale 1.31M))
1.31M
Run Code Online (Sandbox Code Playgroud)
我的问题是:是否有更惯用的方法直接管理来自Clojure的BigInteger对象?或者我坚持将所有内容都包装在自定义库中,例如:
user=> (defn my-bigint …Run Code Online (Sandbox Code Playgroud) 我开始研究Scala编程语言.我对Erlang和Haskell等FP语言有一定的了解,我对for/yield表达式的含义有疑问,比如:
for (arg <- args) yield arg.length
Run Code Online (Sandbox Code Playgroud)
这将收集具有任何输入参数长度的数组.根据我的理解,这似乎是普通FP编程中的map函数:
map (\a -> a * 2) [1, 2, 3] (in Haskell)
Run Code Online (Sandbox Code Playgroud)
我知道Scala库包含scala.collection.map方法,所以我想知道:使用这两种风格有什么区别或限制,或者它们完全相同?
我想知道,考虑到Clojure使用32位散列进行映射实现,如果Clojure映射因此限制为2 ^ 32-1个键(如果不是这样,它如何管理冲突)以及它是否进行散列实施是一致的.TIA!
我正在尝试使用以下代码将一串文本转换为日期:
//Input String
str = "14/01/26,12:13:13+00"
//Format
format = new java.text.SimpleDateFormat("yy/MM/dd,HH:mm:ssz")
//Conversion
format.parse(str)
Run Code Online (Sandbox Code Playgroud)
但我得到以下内容:
例外:无法解释的日期:"14/01/26,12:13:13 + 00"
为了正确解析这个日期,我的格式如何更改?
我正在使用Oracle 12c,我想询问创建表中的这个参数。
我的应用程序在几个表中会进行大量的删除和插入,我认为这个参数不正确
PCTUSED 0
PCTFREE 10
INITRANS 1
MAXTRANS 255
Run Code Online (Sandbox Code Playgroud)
指定较小的 的效果会减少和语句PCTUSED期间产生的处理成本,但较大的会增加和期间的处理成本UPDATEDELETEPCTUSEDINSERTUPDATE。
我认为使用 0 是不正确的PCTUSED:默认值PCTUSED40%。根据文档。
DOC 中的另一点:
假设一个表通常被许多用户同时访问。在这种情况下,您可以考虑使用高 INITRANS 来预分配事务条目空间。这消除了在使用对象时必须分配事务条目空间的开销。另外,允许更高的 MAXTRANS,以便用户无需等待访问必要的数据块。
就我而言,它将是一个 Web 应用程序,其中有 <100 名用户同时工作。
我想知道如何使用它的 URL提取外部站点的Title和Metadescription。我找到了一些解决方案,但不适用于 django/python。
目前我的代码添加了一个指向数据库的链接,我想让它在添加后转到该链接,然后使用相应的Title和更新条目Metadescription。
能够检索og诸如meta property="og:url.
谢谢你。
我在Scala Play Framework中有以下代码:
case class Step(name: String, f: Unit) {
def run = {() => f}
}
Run Code Online (Sandbox Code Playgroud)
编译器给了我一个奇怪的警告
comparing values of type Unit and Unit using '==' will always yield true
Run Code Online (Sandbox Code Playgroud) scala ×6
clojure ×2
map ×2
bigdecimal ×1
biginteger ×1
concurrency ×1
covariance ×1
database ×1
date ×1
django ×1
erlang ×1
future ×1
hash ×1
hashmap ×1
haskell ×1
invariants ×1
oracle ×1
oracle12c ×1
parsing ×1
python ×1
yield ×1