Kotlin 官方文档和这个答案很好地解释了 Kotlin 如何reified让我们改变以下内容:
myJsonString.toData(MyDataClass::class)
Run Code Online (Sandbox Code Playgroud)
到:
myJsonString.toData<MyDataClass>()
Run Code Online (Sandbox Code Playgroud)
但我认为两者都不能很好地解释动机。reified 函数只是因为它节省了几个字符而更可取吗?或者不必将类作为参数传递还有其他好处吗?
我的网页上有以下javascript:
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://www.google.com', true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
alert('resp received, status:' + xhr.status + ', responseText: ' + xhr.responseText);
}
};
xhr.send(null);
Run Code Online (Sandbox Code Playgroud)
这执行并完成w/readyState为4,状态为0,以及empty responseText和responseXML.我知道它实际上正在发送请求b/ci尝试将xhr发送到我的机器上的服务器,而服务器实际上确实做出了响应.为什么我在responseText中没有得到任何东西?它是否有事情需要xhr进入不同服务器的事实?
当我打开js调试器并输入'xhr'来检查对象时我得到了这个:
XMLHttpRequest
DONE:4
HEADERS_RECEIVED:2
LOADING:3
OPENED:1
UNSENT:0
abort:function abort(){
addEventListener:function addEventListener(){
dispatchEvent:function dispatchEvent(){
getAllResponseHeaders:function getAllResponseHeaders(){
getResponseHeader:function getResponseHeader() {
onabort:空
的onerror:空
的onload:空
onloadstart:空
onprogress:空
的onreadystatechange:函数(){
打开:open()函数{
overrideMimeType:功能overrideMimeType(){
readyState的:4
removeEventListener:功能removeEventListener(){
responseText的: ""
responseXML的:空
发送:功能的send(){
setRequestHeader:功能setRequestHeader(){
状态:0
状态文本: ""
上传:XMLHttpRequestUpload
withCredentials:假
我想向处理字符串列表的函数添加一个可选的“过滤器”参数。如果过滤器是nil,我想处理所有字符串,否则我只想处理包含过滤器的字符串。大致:
func process(items: [String], filter: String?) {
for item in items {
if filter == nil || item.contains(filter) {
// Do something with item
}
}
}
Run Code Online (Sandbox Code Playgroud)
类型检查器抱怨将过滤器传入,contains因为它是可选的,但contains需要一个String. 我当然可以强制展开,但这看起来很丑陋。上面的代码会在 Kotlin 中编译,因为它会巧妙地抛弃可选的,但是在 Swift 中表达它的惯用方式是什么?
谢谢!
我想匹配一个包含字符0-9 .-,[]的字符串,如下所示:
return true if str =~ /\A[0-9.-,\[\]]*\Z/
Run Code Online (Sandbox Code Playgroud)
哪个有效,除了它似乎与大括号不匹配,我该如何匹配?
我有一个类型,morton_id_t这是一个64位数字.我有第二种类型,它是一个Morton ID(morton_id_t)位的串联,其中包含几个包含树中级别信息的位:
typedef uint64_t morton_id_t;
typedef uint64_t morton_id_lvl_t;
#define BITS (sizeof(morton_id_lvl_t) * 8)
// number of bits to store the level
#define LEVEL_BITS 6
#define LEVEL_MASK ((1 << LEVEL_BITS) - 1)
// utility functions to pull the level or morton id out of a morton_id_lvl_t
lvl_t level(morton_id_lvl_t n);
morton_id_t morton_id(morton_id_lvl_t n);
// this just strips off the level bits using the `morton_id` function...
bool isAncestor(morton_id_lvl_t ancestor, morton_id_lvl_t descendent);
// ...and calls this
bool isAncestor(morton_id_t …Run Code Online (Sandbox Code Playgroud)