小编Ami*_*imi的帖子

定义函数的"def"和"val"之间有什么区别

有什么区别:

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).

scala

205
推荐指数
3
解决办法
6万
查看次数

可以像中止一个Thread(Thread.Abort方法)一样中止一个Task吗?

我们可以中止这样的线程:

Thread thread = new Thread(SomeMethod);
.
.
.
thread.Abort();
Run Code Online (Sandbox Code Playgroud)

但是我可以以相同的方式中止任务(在.Net 4.0中)而不是取消机制.我想立即杀死任务.

c# parallel-processing .net-4.0

57
推荐指数
4
解决办法
9万
查看次数

"Future.successful(None)"和"Future(None)"之间的区别是什么?

Future.apply启动异步计算,同时Future.successful使用指定的结果创建已完成的Future.

现在Future(None)(Future.apply(None))效率低于Future.successful(None)

scala future

32
推荐指数
1
解决办法
8615
查看次数

为什么scala不会从泛型类型参数中推断出类型?

假设这个功能

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类型可以从列表,它是可以推断ListInt.为什么scala不推断这里的类型?

还有其他方法吗?

scala type-inference

9
推荐指数
1
解决办法
2425
查看次数

C#StyleCop - 使用"this".基类成员的前缀,如当前的类成员与否?

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)

我知道这只是为了更好的可读性.

c# coding-style stylecop this

8
推荐指数
2
解决办法
6695
查看次数

在SOA应用程序中使用DTO的最佳方法是什么?

我们正在使用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的所有属性都可以为空,所以我们只填充我们想要的那些并将其他属性留空. …

architecture wcf poco dto entity-framework-4

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

域服务层的良好命名

抽象

哪个名字更好?

  • Domain.PersonService
  • DomainServices.PersonService
  • DomainServices.PersonDomainService(考虑一些较长的名字PersonDomainServiceModelDecorator)

或者是其他东西?

情况

我们有一个框架,每个层都有一些基类.防爆.存储库,域服务,UI等

每个逻辑层都有一个名称,用作其名称空间:

  • 包含存储库的数据层的"数据"; 防爆.Fx.Data.DbContextRepository
  • 域(非Web)服务层的"服务"; 防爆.Fx.Services.CrudService
  • Web UI层的"Web.UI"; 防爆.Fx.Web.UI.Controllers.CrudController

对于一些额外的层,我们也遵循相同的终端项目规则:

  • "数据"Ex. Project.Data.PersonRepository
  • "服务"Ex. Project.Services.PersonService
  • "Web.UI"Ex. Project.Web.UI.Controllers.PersonController
  • 代码优先实体的"实体"; 防爆.Entities.Person
  • 对象模型的"模型"; 防爆.Models.Person.Criteria,Models.Person.PersonDeleteModel

我的重点是"域名服务"层,但欢迎任何关于其他层的想法.

我们最终得出的结论是"服务"不是"域服务"的合适名称,因为它可能导致"Web服务"或"域服务"层之间的歧义.

现在我们将"服务"命名空间更改为"域"或"域服务".但我们还有另一个问题.我们为每个域服务类(例如PersonService)添加了"服务"后缀.现在,使用"DomainService"后缀(例如DomainServices.PersonDomainServer或者DomainServices.DomainPersonService)似乎很难看.

因此,使用"Domain"作为命名空间可能更漂亮,而类名称显示它们是域命名空间(Ex.Domain.PersonService)下的服务.

c# architecture naming domainservices

7
推荐指数
2
解决办法
2914
查看次数

Typesafe Activator编译错误

我在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 typesafe-activator

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

添加reactivemongo后出现错误"play-iteratees_2.10 not found"

我已经开始通过创建一个简单的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.

scala sbt reactivemongo

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

结合`OptionT`和`EitherT`来处理`Future [[Error,Option [T]]]`

我想使用Cats EitherTOptionT处理该类型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中调用它们,我可以使用EitherTOptionT喜欢这样:

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)

我不知道是否有可能通过合并,使之更简洁,也许OptionTEitherT

scala scalaz scala-cats

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