小编Luk*_*Feo的帖子

将现有的(通用)swift类扩展为可哈希的

我有一些我想放入字典中的类,但是该类不符合Hashable,因此我不能将其用作Swift字典中的键。由于它是一个类,因此可以通过其在内存中的位置来标识它,并且我很乐意使用其标识符,因此类型本身始终不会落入值语义世界。

因此,我宣布将其扩展为

extension SomeGenericType : Hashable {

    public var hashValue: Int {
        return unsafeAddressOf(self).hashValue
    }

}
Run Code Online (Sandbox Code Playgroud)

这似乎还可以,但是Equatable的Hashable继承,所以我也需要实现tha,这是我的第一次尝试:

public func ==(lhs: SomeGenericType, rhs: SomeGenericType) -> Bool {
    return unsafeAddressOf(lhs) == unsafeAddressOf(rhs)
}
Run Code Online (Sandbox Code Playgroud)

错误

 "Reference to generic type 'SomeGenericType' requires arguments in <...>"
Run Code Online (Sandbox Code Playgroud)

...足够公平,所以让我们这样做

public func ==<T : SomeGenericType >(lhs: T, rhs: T) -> Bool {
    return unsafeAddressOf(lhs) == unsafeAddressOf(rhs)
}
Run Code Online (Sandbox Code Playgroud)

现在说

 "Reference to generic type 'SomeGenericType' requires arguments in <...>" 
Run Code Online (Sandbox Code Playgroud)

嗯,所以我可以使它适用于所有SomeGenericType,无论它得到什么类型。也许我们可以将AnyObject放在那里?

public func ==<T : SomeGenericType<AnyObject>>(lhs: T, rhs: T) -> Bool …
Run Code Online (Sandbox Code Playgroud)

generics swift

4
推荐指数
1
解决办法
1369
查看次数

模式匹配作为swift中的函数表达式

Swift是一个非常实用的语言,函数式语言都是关于表达式而不是语句,这就是开关模式匹配让我感到困惑的原因.

所有的例子都是这样的:

switch x {
case > 0:
    print("positive")
case < 0:
    print("negative")
case 0:
    print("zero")
}
Run Code Online (Sandbox Code Playgroud)

但我想做这样的事情:

let result = switch x {
case > 0:
    "positive"
case < 0:
    "negative"
case 0:
    "zero"
}
Run Code Online (Sandbox Code Playgroud)

目前我能看到的唯一方法是:

var result: String?

switch x {
case > 0:
    result = "positive"
case < 0:
    result = "negative"
case 0:
    result = "zero"
}

if let s = result {
    //...
}
Run Code Online (Sandbox Code Playgroud)

这显然不像基于'表达式'的switch语句那样优雅.是否有任何工作或替代方案或苹果需要做些什么来增强语言?

expression functional-programming pattern-matching switch-statement swift

4
推荐指数
1
解决办法
108
查看次数

为什么这两个实例不是"相等()"?

可能重复:
为什么.equals方法在两个相同的值对象上失败?

这很简单,但我显然错过了一些非常大的东西.

Cat cat1 = new Cat("bob");
Cat cat2 = new Cat("bob");
System.out.println(cat1 == cat2); 
//false since these references point to diferent objects
System.out.println(cat1.equals(cat2));
//returns false also??
Run Code Online (Sandbox Code Playgroud)

Cat 只是一个只有名字的简单类.

这里发生了什么,equals()工作怎么样?我的印象是它比较了对象的所有字段.似乎并非如此.

我需要为我的所有课程覆盖它吗?

java equality equals

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

使现有类在scala中实现traits

我有一个接受键值对的类,例如,它可以以map对象或case类的形式出现.让我们定义以下抽象:

 trait Reportable {
    def getAttributes : Map[String,Any]
  }
Run Code Online (Sandbox Code Playgroud)

我想要一个采用List [Reportable]的方法.可报告的可能实现是:

  • 实现本身的地图
  • 案例类我可以使用一些使用反射的东西从案例类中获取属性并将其放入地图中

问题是我无法弄清楚如何制作Product(所有案例类的基类)和Map类实现我的特性.我希望能够获取现有的类并混合可报告的特性,并根据类已有的方法实现它.

scala traits mixins

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

试图确认延迟加载是否正常

我正在学习hibernate,我正在使用调试器来了解hibernate如何获取对象.我在我的XML中启用了延迟加载,我使用创建查询来获取对象.该对象具有与之关联的Set.

当我在调试器中查看变量值时,它似乎完全加载了对象图,即没有懒惰地获取集及其属性.我可以想到为什么会出现这种情况的几个原因.

1)我的xml/config出了问题,我已经启用了eager.我不确定是这种情况,一切都是默认的,这是懒惰的提取.

2)IDE调试器的工作方式是,当我查看它们时,会导致hibernate触发延迟加载.

3)Hibernate从二级缓存中获取整个对象图.香港专业教育学院试图禁用此功能,但这似乎没有任何效果

还有其他想法吗?

java hibernate lazy-loading

2
推荐指数
1
解决办法
2054
查看次数

在javascript中以毫秒为单位获取当前的unix时间

嗨,这非常简单,我不敢相信我会问这个。

我尝试了以下方法:

Moment.now()
Date.now()
new Date().valueOf()
Run Code Online (Sandbox Code Playgroud)

以及在其他堆栈溢出问题中发现的各种其他技巧

它们都以微秒为单位给我时间。

例如

1543409290654

which is 09/10/50878 @ 10:57am (UTC)
Run Code Online (Sandbox Code Playgroud)

我知道我可以除以 1000 但肯定有 javascript 中的 api 以毫秒为单位获取 unix 时间戳。

我已经在 chrome 中看到了这一点并做出了本机反应

编辑:

所以我意识到我的愚蠢我将 unix 时间戳放入一个网站,该网站将其呈现为 ISO 日期,但它期待秒,这就是为什么我认为我的日期以毫秒为单位

javascript react-native

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

如何在asp.net中进行异步Web调用

让我们说在一个ASP.NET应用程序,WCF或Web API中,这个应用程序工作的一部分是在途中联系第三方.我喜欢异步或非阻塞地执行此操作,以便线程池不会饿死.但是,我不想在服务中更改我的所有代码,只需要进行Web调用.

这是我写的一些代码:

    public string GetSomeData()
    {
        Task<string> stuff = CallApiAsync(); 

        return stuff.result; //does this block here?

    }

    private async Task<string> CallApiasync()
    {
        using (var httpClient = new HttpClient())
        {
            string response = await httpClient.GetStringAsync(Util.EndPoint).ConfigureAwait(false); 

            return response;
        }

    }
Run Code Online (Sandbox Code Playgroud)

我认为这个想法如下,但请纠正任何误解.

CallApi的调用者可以调用该方法,当它等待等待时,会创建一个Task,它代表一些异步完成的工作,但这需要一些时间.此时线程到达等待返回到线程池以执行其他操作,即处理不同的请求.一旦任务完成,await线就会唤醒并且代码从那里继续,就好像它是同步的一样.

如果是这种情况,为什么我需要从我的apimethod返回一个任务.调用者似乎必须调用stuff.Result,这意味着任务可能没有完成,调用结果可能会阻塞?注意我不想让调用方法异步,因为调用它的方法需要是异步等等.

我的代码中的事件顺序是什么?

另一个问题是为什么我需要将configureAwait设置为false?否则一切都会挂起.

c# asp.net wcf asynchronous async-await

0
推荐指数
1
解决办法
417
查看次数

联合类型的集合 scala

在 Scala 中是否有可能有一个联合类型的集合。有几个方法联合类型讨论这里最精彩的答案感觉最原生的,我有这样的事情:

sealed trait StringOrNumber[T]
object StringOrNumber {
    implicit object IntWitness extends StringOrNumber[Int]
    implicit object StringWitness extends StringOrNumber[String]
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试制作包含两者的地图时

val m: Map[String, Any] = Map("str" -> "hellp", "int" -> 32)
Run Code Online (Sandbox Code Playgroud)

scala 编译器将其视为 [String,Any] 的映射 有没有办法告诉 Scala 编译器这是一个映射 [String, StringOrNumber]

编辑:

我不认为使用上述方法可以创建字符串或联合的集合。我认为它需要是联合类型的另一种方法,因为上述类似于重载方法而不是类型系统中的真正联合类型

functional-programming scala discriminated-union scala-collections

0
推荐指数
1
解决办法
1007
查看次数