小编Kar*_*eem的帖子

如何定义将由不可变Set比较方法使用的自定义相等操作

我有一个不可变的Set类,Set [MyClass],我想使用Set方法intersect和diff,但我希望它们使用我的自定义equals方法测试相等性,而不是默认对象相等性测试

我已经尝试重写==运算符,但它没有被使用.

提前致谢.

编辑:

intersect方法是GenSetLike的具体值成员

规范:http://www.scala-lang.org/api/current/scala/collection/GenSetLike.html src:https://lampsvn.epfl.ch/trac/scala/browser/scala/tags/R_2_9_1_final/src //library/scala/collection/GenSetLike.scala#L1

def intersect(that: GenSet[A]): Repr = this filter that
Run Code Online (Sandbox Code Playgroud)

所以使用过滤方法完成交叉.

另一个编辑:

过滤器在TraversableLike中定义

规范:http://www.scala-lang.org/api/current/scala/collection/TraversableLike.html

src:https://lampsvn.epfl.ch/trac/scala/browser/scala/tags/R_2_9_1_final/src//library/scala/collection/TraversableLike.scala#L1

def filter(p: A => Boolean): Repr = {
  val b = newBuilder
      for (x <- this) 
        if (p(x)) b += x
      b.result
}
Run Code Online (Sandbox Code Playgroud)

对我来说不清楚的是它在没有谓词的情况下使用它,p.这不是一个隐含的参数.

overriding scala set

43
推荐指数
2
解决办法
2万
查看次数

通过从构造函数返回现有实例来实现javascript实例存储

我正在尝试在Backbone.js中实现我的版本"Instance Store",如Soundcloud在他们最近的博客文章中所述:

http://backstage.soundcloud.com/2012/06/building-the-next-soundcloud/

相关摘录:

为了解决这个问题,我们使用一个我们称之为实例存储的构造.此存储是一个对象,每次调用模型的构造函数时都会隐式访问和修改该对象.当第一次构建模型时,它将自身注入到商店中,使用其id作为唯一键.如果使用相同的id调用相同的模型构造函数,则返回原始实例.

var s1 = new Sound({id: 123}),
    s2 = new Sound({id: 123});

s1 === s2; // true, these are the exact same object.
Run Code Online (Sandbox Code Playgroud)

这是因为Javascript的一个鲜为人知的鲜为人知的功能.如果构造函数返回一个对象,那么这就是赋值.因此,如果我们返回对先前创建的实例的引用,我们将获得所需的行为.在幕后,构造函数基本上是这样做的:

var store = {};

function Sound(attributes) {
    var id = attributes.id;

    // check if this model has already been created
    if (store[id]) {
        // if yes, return that
        return store[id];
    }
    // otherwise, store this instance
    store[id] = this;
}
Run Code Online (Sandbox Code Playgroud)

我通过重写Backbone.Model类来创建我自己的构造函数来实现我的这个版本.

var MyModel = Backbone.Model.extend({
    constructor: function (attributes, options) {
        var id …
Run Code Online (Sandbox Code Playgroud)

javascript backbone.js

6
推荐指数
1
解决办法
1316
查看次数

通过REST API验证/更改密码

我想通过REST API更改用户密码.这不是忘记或重置密码功能,而是登录用户想要更改其密码.

表单需要当前密码,新密码和新密码的确认.但是,我想在用户填写时验证每个表单字段.对于newPasswordconfirmNewPassword(客户端)来说这是微不足道的,但不是currentPassword.目前正在通过执行User对象的更新PUT /users/:id.如果传递了密码参数,我currentPassword会在保存之前检查参数并确保其正确.但是,为了验证,我不确定最好的方法.

我也有POST /users/validate- 不确定这是否也是最好的.这证实一个用户对象都创建和更新,但仅验证属于用户对象(字段email,username,password).currentPassword不是其中之一.想知道如何处理这个问题.我考虑过的一些事情:

POST /users/check_password, POST /users/validate(如果传递了该参数,则添加currentPassword验证,并检查currentPassword是否与用户现有密码匹配)和 POST /users/:id/validate(对现有用户进行单独验证,需要currentPassword).

任何想法或建议将不胜感激.我的第一个应用程序只通过REST API公开功能.

validation rest restful-url restful-architecture

5
推荐指数
3
解决办法
1万
查看次数

如何在Scala表达式中保持功能风格

当我需要将对象的多个参数收集到List中时,我一直在努力寻找一种方法来保持表达式的功能样式.

例如,假设我有一个Notification对象,它既有fromId(通知来自的用户ID),也有objectOwnerId(创建原始对象的用户的id).这些在facebook风格通知中可能有所不同("X也在Y的帖子上发表评论").

我可以使用for表达式收集userIds

val userIds = for { notification <- notifications } yield notification.fromId
Run Code Online (Sandbox Code Playgroud)

但是说我想将fromIds和objectOwnerIds收集到一个列表中,有没有办法在没有vars用户的单个表达式中执行此操作?

我过去做过类似的事情:

var ids = List()
for {
    notification <- notifications
    ids = ids ++ List(notification.fromId, notification.objectOwnerId)
}
ids = ids.distinct
Run Code Online (Sandbox Code Playgroud)

但感觉必须有更好的方法.使用var,以及在完成收集后调用distinct的需要都很难看.我可以避免与一些条件有所不同,但我正在努力学习正确的功能方法来做事.

在此先感谢您的帮助!

for-loop functional-programming scala list

5
推荐指数
2
解决办法
243
查看次数