有什么区别:
def even: Int => Boolean = _ % 2 == 0
Run Code Online (Sandbox Code Playgroud)
和
val even: Int => Boolean = _ % 2 == 0
Run Code Online (Sandbox Code Playgroud)
两者都可以称为even(10).
我们可以中止这样的线程:
Thread thread = new Thread(SomeMethod);
.
.
.
thread.Abort();
Run Code Online (Sandbox Code Playgroud)
但是我可以以相同的方式中止任务(在.Net 4.0中)而不是取消机制.我想立即杀死任务.
Future.apply启动异步计算,同时Future.successful使用指定的结果创建已完成的Future.
现在Future(None)(Future.apply(None))效率低于Future.successful(None)?
假设这个功能
def func[A](data: List[A], mapper: A => String) = {
data.map(item => mapper(item))
}
Run Code Online (Sandbox Code Playgroud)
为什么这段代码不能编译:
val list = List(1, 2, 3)
func(list, a => a.toString)
Run Code Online (Sandbox Code Playgroud)
但是这个做了:
val list = List(1, 2, 3)
func[Int](list, a => a.toString)
Run Code Online (Sandbox Code Playgroud)
要么
val list = List(1, 2, 3)
func(list, (a: Int) => a.toString)
Run Code Online (Sandbox Code Playgroud)
虽然a类型可以从列表,它是可以推断List的Int.为什么scala不推断这里的类型?
还有其他方法吗?
StyleCop有一个关于使用"this"的规则.调用类成员的前缀(SA1101).
这个规则是否适用于从其基类继承的类的成员(例如方法).
例:
class BaseClass
{
protected void F1()
{
...
}
}
class ChildClass : BaseClass
{
protected void F2()
{
...
}
protected void F3()
{
this.F2(); // This is correct acording to SA1101
// F1 is a member of base class and if I dont put this prefix, stylecop will not show any message.
this.F1(); // Is this correct?
F1(); // Or this?
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这只是为了更好的可读性.
我们正在使用EF,WCF和jQuery实现SOA Web应用程序.
以下是我们的架构简介:
------------- ---
| UI | | |
------------- | |
| Services | | D |
------------- | T |
| Businsess | | O |
------------- | |
| Dal | | |
------------- ---
Run Code Online (Sandbox Code Playgroud)
我们知道我们应该让DTO类在服务和UI之间专门在层之间传递数据但是我们有一些关于使用DTO(发送到UI或从UI接收)的方式的概念性问题.
对于数据驱动项目,我们可以使用POCO自动生成DTO对象.但在大型应用程序中,并不是那么简单.
我们知道解决问题的两种解决方案:
第一种解决方案(除了新手动创建的DTO之外,使用POCO)
例如,假设我们有一个包含许多字段的实体.并且有一个查找组合框,显示实体记录.我们只需要一个实体键作为组合框值字段,另一个字段(例如Title)作为组合框文本字段.因此,我们创建一个名为"GetAllItemsTitle"的方法来检索所有实体.现在我们应该返回我们想要的结构(本例中的一个键和一个值).所以我们必须创建一个新类来存储该结构(一个键和一个值).
这将是新的DTO课程:
[DataContract]
public class SampleManuallyDto
{
[DataMember]
public long Id { get; set; }
[DataMember]
public string Title { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
方法签名是这样的:
public List<SampleManuallyDto> GetAllItemsTitle()
Run Code Online (Sandbox Code Playgroud)
第二种解决方案(使用Nullable或Emptyable DTO)
我们可以绕过POCO并手动创建DTO.然后我们可以将DTO的所有属性定义为可空或类似可以被识别为空的属性(我称之为Emptyable).它允许我们将DTO用于多种目的.当然,我们需要遵循适配器模式.例如,为名为"FromEntity"和"ToEntity"的可清空DTO创建两个方法,将我们手动创建的DTO转换为EntityObjects(实体框架).
现在,我们可以在"第一个解决方案"(GetAllItemsTitle)的示例中绕过创建新的DTO类.
方法签名将如下所示:
public List<SampleDTO> GetAllItemsTitle()
Run Code Online (Sandbox Code Playgroud)
但是在方法体中我们只填充SampleDTO的"Id"和"Title"属性.正如我所说,SampleDTO的所有属性都可以为空,所以我们只填充我们想要的那些并将其他属性留空. …
哪个名字更好?
Domain.PersonServiceDomainServices.PersonServiceDomainServices.PersonDomainService(考虑一些较长的名字PersonDomainServiceModelDecorator)或者是其他东西?
我们有一个框架,每个层都有一些基类.防爆.存储库,域服务,UI等
每个逻辑层都有一个名称,用作其名称空间:
Fx.Data.DbContextRepositoryFx.Services.CrudServiceFx.Web.UI.Controllers.CrudController对于一些额外的层,我们也遵循相同的终端项目规则:
Project.Data.PersonRepositoryProject.Services.PersonServiceProject.Web.UI.Controllers.PersonControllerEntities.PersonModels.Person.PersonDeleteModel我的重点是"域名服务"层,但欢迎任何关于其他层的想法.
我们最终得出的结论是"服务"不是"域服务"的合适名称,因为它可能导致"Web服务"或"域服务"层之间的歧义.
现在我们将"服务"命名空间更改为"域"或"域服务".但我们还有另一个问题.我们为每个域服务类(例如PersonService)添加了"服务"后缀.现在,使用"DomainService"后缀(例如DomainServices.PersonDomainServer或者DomainServices.DomainPersonService)似乎很难看.
因此,使用"Domain"作为命名空间可能更漂亮,而类名称显示它们是域命名空间(Ex.Domain.PersonService)下的服务.
我在Ubuntu 13.04上使用Typesafe Activator.它工作正常,但是当我创建一个新项目时,有时它什么都不做,有时它报告模板被克隆(没有下载任何东西).创建项目时,我得到以下编译错误:
刷新要查看更改的源文件列表...
从/ home/myusername/activator-play-autosource-reactivemongo/project加载项目定义
将当前项目设置为activator-play-autosource-reactivemongo(在构建文件中:/ home/myusername/activator-play-autosource-reactivemongo /)
应用状态转换com.typesafe.sbtrc.SetupSbtChild来自""/home/myusername/.sbt/boot/scala-2.9.2/com.typesafe.sbtrc/sbt-rc-probe-0-12/1.0-28edcfb4984c8be5e556bad192b62551504aa23d/ SBT-RC-道具 - 1.0-28edcfb4984c8be5e556bad192b62551504aa23d.jar:/home/myusername/.sbt/boot/scala-2.9.2/com.typesafe.sbtrc/sbt-rc-probe-0-12/1.0-28edcfb4984c8be5e556bad192b62551504aa23d/sbt- RC-探针0-12-1.0-28edcfb4984c8be5e556bad192b62551504aa23d.jar """
java.lang.ClassNotFoundException:com.typesafe.sbtrc.SetupSbtChild $
使用'last'作为完整日志.
无法重新加载源文件列表:sbt进程从未联系过,因此无法处理请求WatchTransitiveSourcesRequest(true)
我已经开始通过创建一个简单的Scala项目来学习reactivemongo.我从SBT开始.这是我的build.sbt档案:
name := "mongo-test"
version := "1.0"
scalaVersion := "2.10.2"
libraryDependencies ++= Seq(
"org.reactivemongo" %% "reactivemongo" % "0.9"
)
Run Code Online (Sandbox Code Playgroud)
但是我在执行compile命令时遇到错误:
[info] Resolving play#play-iteratees_2.10;2.1.0 ...
[warn] module not found: play#play-iteratees_2.10;2.1.0
[warn] ==== local: tried
[warn] /home/amir/.ivy2/local/play/play-iteratees_2.10/2.1.0/ivys/ivy.xml
[warn] ==== public: tried
[warn] http://repo1.maven.org/maven2/play/play-iteratees_2.10/2.1.0/play-iteratees_2.10-2.1.0.pom
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: UNRESOLVED DEPENDENCIES ::
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: play#play-iteratees_2.10;2.1.0: not found
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
Run Code Online (Sandbox Code Playgroud)
更新:我的SBT版本是0.13.0.
我想使用Cats EitherT并OptionT处理该类型Future[Either[Error, Option[T]].假设有以下方法:
def findTeacher(id: Int): Future[Either[String, Option[Teacher]]]
def findSchool(teacher: Teacher): Future[Either[String, Option[School]]]
Run Code Online (Sandbox Code Playgroud)
现在,如果我想随后在for-comprehension中调用它们,我可以使用EitherT并OptionT喜欢这样:
def getSchoolByTeacherId(id: Int): Future[Either[String, Option[School]]] = {
val result = for {
maybeTeacher <- EitherT(findTeacher(id))
schoolF = maybeTeacher.map(findSchool).getOrElse(Future.successful(Right(None)))
school <- EitherT(schoolF)
} yield {
school
}
result.value
}
Run Code Online (Sandbox Code Playgroud)
我不知道是否有可能通过合并,使之更简洁,也许OptionT用EitherT?
scala ×6
c# ×3
architecture ×2
.net-4.0 ×1
coding-style ×1
dto ×1
future ×1
naming ×1
poco ×1
sbt ×1
scala-cats ×1
scalaz ×1
stylecop ×1
this ×1
wcf ×1