我正在从Slick迁移到Slick 2,在Slick 2中你想tupled在投影到案例类时使用该方法(如http://slick.typesafe.com/doc/2.0.0-所示)RC1/migration.html)
问题是当case类有一个伴随对象时,即如果你有这样的东西
case class Person(firstName:String,lastName:String) {
}
Run Code Online (Sandbox Code Playgroud)
与伴侣对象一起
object Person {
def something = "rawr"
}
Run Code Online (Sandbox Code Playgroud)
在相同的范围内,该tupled方法不再有效,因为它试图运行tupled的object,而不是,case class.
有没有一种方法来检索case class的Person,而不是object,所以你可以调用tupled正确?
在Slick 3.1中,通过完全重新设计新API,在执行插入时似乎无法查看生成的SQL语句.
如果你有类似的东西
val action = DBIO.seq(
SomeTables ++= Seq(TableData(1,"First"),TableData(2,"Second"))
)
Run Code Online (Sandbox Code Playgroud)
看起来你实际上看不到生成的SQL action.该result方法实际上并不存在,如果您不使用,则仅使用statementsprint的变体?代替实际值DBIO.seq,如果您使用DBIO.seq该statements方法实际上并不存在.
即使使用诸如.transactionally或之类的方法.withPinnedSession,它似乎没有什么区别(但我不知道这应该如何帮助).
从所有方法的观察来看,这似乎是不可能的?
假设您有类似以下的案例类
case class Test1(a:String,b:Int,c:Char)
case class Test2(a:String,b:Int)
Run Code Online (Sandbox Code Playgroud)
并使用以下变量实例化类
val test1 = Test1("first",2,'3')
val test2 = Test2("1st",20)
Run Code Online (Sandbox Code Playgroud)
有没有办法使用该.copy方法(或其他方法),将Test2中的变量应用于Test1,如
val test3 = test1.copy(test2) //Note this isn't valid scala code
// Result should be ("1st",20,'3')
Run Code Online (Sandbox Code Playgroud)
如果在纯scala中这是不可能的,那么它将如何在Shapeless 1/2中完成(当前代码在Shapeless 1中,但我们计划在某个时间点升级到Shapeless 2)
我基本上试图看看我是否可以在Haskell中模拟一个ORM框架,这样如果用户想要创建一个数据库模型,他们会做这样的事情
data Car = Car {
company :: String,
model :: String,
year :: Int
} deriving (Model)
Run Code Online (Sandbox Code Playgroud)
表格为"Car",列为公司,型号,年份
要在Haskell中执行此操作,您必须使用类和泛型的组合,这就是我遇到困难的地方.使用本教程(http://www.haskell.org/ghc/docs/7.4.1/html/users_guide/generic-programming.html),我想出了这个(基本上是复制和重命名,所以我可以得到代码工作)
{-# LANGUAGE DeriveGeneric, TypeOperators, TypeSynonymInstances, FlexibleInstances #-}
module Main where
import GHC.Generics
class SModel b where
s_new :: b -> IO()
instance SModel Int where
s_new s = putStrLn s++":Int"
instance SModel Integer where
s_new s = putStrLn s++":Integer"
instance SModel String where
s_new s = putStrLn s++":String"
class Model m where
new :: m a -> IO() …Run Code Online (Sandbox Code Playgroud) 在使用光滑时,如何在返回整个更新的表时更新表格表中的几列?
假设SomeTables是某些TableQuery,如果你想要,例如,在表中添加一个项目(并返回新添加的项目),通常会编写这样的查询
val returnedItem = SomeTables returning SomeTables += someTable
Run Code Online (Sandbox Code Playgroud)
如果你想更新一个项目并将整个项目返回整个项目,你会怎么做?我怀疑你会做这样的事情
val q = SomeTables.filter(_.id === id).map(x => (x.someColumn,x.anotherColumn)) returning SomeTables
val returnedItem = q.update((3,"test"))
Run Code Online (Sandbox Code Playgroud)
但是以下代码不起作用,我看不到任何关于如何执行此操作的文档
请注意,我知道您可以事先查询该项目,更新它,然后在原始对象上使用copy,但这需要大量的样板(以及数据库跳转)
我有一个有趣的问题,我基本上需要创建一个.jar(加上所有的类路径依赖项),其中包含一个 SBT 项目(加上它的任何子项目)的所有测试。这个想法是我可以只使用运行 jarjava -jar并且所有测试都将执行。
我听说这可能与 sbt-assembly 有关,但您必须手动运行您拥有assembly的每个 sbt 子项目(每个子项目都有自己的.jars),理想情况下,我只想运行一个命令,.jar为您碰巧拥有的每个 sbt root+sub 项目中的每个测试(以同样的方式,如果您test在带有子项目的 sbt 项目中运行,它将为所有内容运行测试)。
我们当前使用的测试框架是 specs2,但我不确定这是否有所不同。
有谁知道这是否可能?
case class假设您有以下代码,我在将具有> 22列的表专门映射到a时遇到问题
import slick.driver.PostgresDriver
import scala.slick.collection.heterogenous._
import syntax._
import shapeless.Generic
case class TwentyThreeCaseClass(
val id:Option[Long],
val one:String,
val two:String,
val three:String,
val four:String,
val five:String,
val six:String,
val seven:String,
val eight:String,
val nine:String,
val ten:String,
val eleven:String,
val twelve:String,
val thirteen:String,
val fourteen:String,
val fifteen:String,
val sixteen:String,
val seventeen:String,
val eighteen:String,
val nineteen:String,
val twenty:String,
val twentyOne:String,
val twentyTwo:String,
val twentyThree:String,
val twentyFour:String
)
class TwentyThreeTable(tag:Tag) extends Table[TwentyThreeCaseClass](tag,"twenty_three_table") {
def id = column[Long]("id",O.PrimaryKey,O.AutoInc)
def one = column[String]("one")
def …Run Code Online (Sandbox Code Playgroud) 我最近从一个带有cocoapods安装的基础XCode项目中设置了一个项目,当将项目导入AppCode 3.1时,我没有得到通过CocoaPods安装的swift框架的任何自动完成功能.
这是我的Podfile
# Uncomment this line to define a global platform for your project
platform :osx, '10.10'
use_frameworks!
target 'Main' do
pod "SwiftyJSON", ">= 2.1.3"
pod 'BrightFutures', '~> 1.0.0-beta.3'
end
target 'MainTests' do
end
Run Code Online (Sandbox Code Playgroud)
如您所见,我定义了2个pod(一个是SwiftyJson,一个是BrightFutures).这两个pod都安装为Swift Frameworks(因此为什么use_frameworks!).
所有东西似乎都被导入并且正常用于AppCode(我有两个项目,一个是主项目,另一个是Pods,它与XCode中的完全相同),但似乎AppCode没有索引任何Pod框架,所以我根本没有获得使用这些框架的自动完成状态.例如,在以下代码中
import Cocoa
import BrightFutures
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(aNotification: NSNotification) {
let f = future { 5 }.map{f in f + 7}
f.onSuccess{callback in println(callback)}
// Insert code here to initialize your application
}
func applicationWillTerminate(aNotification: NSNotification) …Run Code Online (Sandbox Code Playgroud) 我目前正在修复一个非常奇怪的错误,即private final val在访问对象字段之前没有对其进行初始化。代码的位置可以在https://github.com/mdedetrich/soda-time/blob/master/jvm/src/main/scala/org/joda/time/chrono/GregorianChronology.scala#L12-L33找到.
您可以通过拉取上述 repo 然后运行sodatimeJVM/console然后在控制台中运行 `import org.joda.time._;来模拟这个错误;DateTime.now().minusDays(10)
代码已经贴在这里
object GregorianChronology {
private final val MILLIS_PER_YEAR = (365.2425 * DateTimeConstants.MILLIS_PER_DAY).toLong
private final val MILLIS_PER_MONTH = (365.2425 * DateTimeConstants.MILLIS_PER_DAY / 12).toLong
private final val DAYS_0000_TO_1970 = 719527
private final val MIN_YEAR = -292275054
private final val MAX_YEAR = 292278993
private final val INSTANCE_UTC = getInstance(DateTimeZone.UTC)
private final val cCache = new ConcurrentHashMap[DateTimeZone, Array[GregorianChronology]]()
def getInstanceUTC(): GregorianChronology = INSTANCE_UTC
def getInstance(): GregorianChronology = getInstance(DateTimeZone.getDefault, 4)
def …Run Code Online (Sandbox Code Playgroud) 在尝试使用应用程序仿函数进行验证时(Monad捕获多个异常(不仅仅是单个失败)),我在scalaz中遇到了一个禁止超过14个仿函数的硬限制,所以这里有一个有用的注释(https:// github .com/scalaz/scalaz/issues/504#issuecomment-23626237)导航我使用HLists而不是applicative functor
现在它工作得非常好(从此处手动输入此序列文件,因为它不在maven https://github.com/typelevel/shapeless-contrib/blob/master/scalaz/main/scala/sequence.scala?来源= c)
我的问题是,我知道这是可能的,你怎么会自动实例化case class Foo(i:Int,s:String)而不必手动匹配模式与案例,只是再次重新应用参数
基本上我想做这样的事情
case class Foo(i:Int,s:String)
implicit def TwoFoo = Iso.hlist(Foo.apply _, Foo.unapply _)
val someFoo = sequence(
1.successNel[Int] ::
"2".successNel[String] ::
HNil
).map { Foo.apply _} // Note this doesn't work
someFoo match {
case Success(a) => println(a)
case Failure(a) => {
println("failure")
println(a)
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个使用宏的scala项目,它基本上遵循这里描述的确切方法(http://www.scala-sbt.org/0.12.4/docs/Detailed-Topics/Macro-Projects.html),包括整个分发部分(所以本质上我有一个根项目,一个名为宏的子项目,用于保存正在使用的宏)
问题是,当我发布我的项目(现在使用publish-local),而另一个scala项目使用带有宏作为依赖项的项目时,它会尝试拉宏#macro_2.10; 0.1-SNAPSHOT因为它出现在POM.这导致项目无法编译,因为它无法解决依赖关系,即
> compile
[info] Updating {file:/Users/mdedetrich/silvermanwylie/waitress/}default-0e4b9d...
[info] Resolving macro#macro_2.10;0.1-SNAPSHOT ...
[warn] module not found: macro#macro_2.10;0.1-SNAPSHOT
[warn] ==== local: tried
[warn] /Users/mdedetrich/.ivy2/local/macro/macro_2.10/0.1-SNAPSHOT/ivys/ivy.xml
[warn] ==== public: tried
[warn] http://repo1.maven.org/maven2/macro/macro_2.10/0.1-SNAPSHOT/macro_2.10-0.1-SNAPSHOT.pom
[info] Resolving org.slf4j#slf4j-api;1.6.4 ...
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: UNRESOLVED DEPENDENCIES ::
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: macro#macro_2.10;0.1-SNAPSHOT: not found
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[trace] Stack trace suppressed: run last *:update for the full output.
[error] (*:update) sbt.ResolveException: unresolved dependency: macro#macro_2.10;0.1-SNAPSHOT: not found
[error] Total time: 0 s, completed Aug 23, 2013 8:15:56 …Run Code Online (Sandbox Code Playgroud)