我有一些我想放入字典中的类,但是该类不符合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) 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
这很简单,但我显然错过了一些非常大的东西.
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()工作怎么样?我的印象是它比较了对象的所有字段.似乎并非如此.
我需要为我的所有课程覆盖它吗?
我有一个接受键值对的类,例如,它可以以map对象或case类的形式出现.让我们定义以下抽象:
trait Reportable {
def getAttributes : Map[String,Any]
}
Run Code Online (Sandbox Code Playgroud)
我想要一个采用List [Reportable]的方法.可报告的可能实现是:
问题是我无法弄清楚如何制作Product(所有案例类的基类)和Map类实现我的特性.我希望能够获取现有的类并混合可报告的特性,并根据类已有的方法实现它.
我正在学习hibernate,我正在使用调试器来了解hibernate如何获取对象.我在我的XML中启用了延迟加载,我使用创建查询来获取对象.该对象具有与之关联的Set.
当我在调试器中查看变量值时,它似乎完全加载了对象图,即没有懒惰地获取集及其属性.我可以想到为什么会出现这种情况的几个原因.
1)我的xml/config出了问题,我已经启用了eager.我不确定是这种情况,一切都是默认的,这是懒惰的提取.
2)IDE调试器的工作方式是,当我查看它们时,会导致hibernate触发延迟加载.
3)Hibernate从二级缓存中获取整个对象图.香港专业教育学院试图禁用此功能,但这似乎没有任何效果
还有其他想法吗?
嗨,这非常简单,我不敢相信我会问这个。
我尝试了以下方法:
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 日期,但它期待秒,这就是为什么我认为我的日期以毫秒为单位
让我们说在一个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?否则一切都会挂起.
在 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
java ×2
scala ×2
swift ×2
asp.net ×1
async-await ×1
asynchronous ×1
c# ×1
equality ×1
equals ×1
expression ×1
generics ×1
hibernate ×1
javascript ×1
lazy-loading ×1
mixins ×1
react-native ×1
traits ×1
wcf ×1