V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  ns09005264  ›  全部回复第 1 页 / 共 10 页
回复总数  190
1  2  3  4  5  6  7  8  9  10  
这个写法就像是仓颉没有注解和反射功能。
6 天前
回复了 wjx0912 创建的主题 TypeScript typescript 达人乱入
你可能习惯了其他语言里的 null 可以设置为某类型的值,或者 nil 设置为指针的值,这样的语言有 java 和 golang 。

在 Typescript 里这样是不行的,变量的类型不可以有空值,
但是 Typescript 有联合类型,或许是你不知道联合类型这个知识点才产生了疑惑,通过 | 符号连接,你可以为一个变量声明这样的类型: `let xxx : string | number | array`表示 xxx 可能是这三种类型之一。

有个说法是《 null ,一个十亿美元的错误》
8 天前
回复了 iorilu 创建的主题 程序员 现在玩 neovim 最简单得方式是什么
> 想看看有什么简洁快速得方案, 我主要也就看看文件, 快速浏览文件, 不用来当 ide 开发, 不折腾配置 最好零配置, 直接用, 稳定不经常升级得版本

这需求 helix 应该可以满足你,零配置即可获得:文件浏览 space+f 、代码高亮、lsp 支持(当然需要自行安装对应的 lsp)、与 vim 相似但更好的操作方式。
我想 javascript 的异步大概是这样发展的:
1. 最开始是 xmlhttprequest ,然后通过回调函数处理异步结果。
2. 之后添加了 Promise ,通过链式调用来解决回调地狱,本质就是一个“工具类”,用户也可以手写 Promise ,在语法上没什么特别的。
3. 添加了 await 和 async 关键字,专门在语法层面改善了 Promise 的链式调用地狱。
现在的情况是,用来解决回调地狱的 Promise ,被 await 和 async 进一步取代了。


还能用到 Promise 的地方,这里有一个例子,有许多图片 node 共用一张精灵图,而图片 node 是根据用户滚动视图懒加载的,会先于精灵图的加载展示在页面文档里,因此利用了 Promise 给图片 node 一个保证,等你要展示图片的时候,再叫我。

https://github.com/MapoMagpie/eh-view-enhance/blob/d77e0655cff35818141b5e6e5246221b1fb12d74/src/platform/ehentai.ts#L211
在 211 行给 node.delaySrc 设置了 Promise 属性,但是在构造的时候将 Promise 里的 resolve 和 reject 拿走了,接着在 215 行的异步操作的回调函数里去执行 resolve 或 reject 。

最后在某个将来时刻再使用 node.delaySrc
https://github.com/MapoMagpie/eh-view-enhance/blob/d77e0655cff35818141b5e6e5246221b1fb12d74/src/img-node.ts#L146
18 天前
回复了 Leon6868 创建的主题 Chrome Chrome 更换默认滚动条样式,向 Edge 看齐
更好的是 Firefox 的滚动条。
项目风格延续吧
18 天前
回复了 lysShub 创建的主题 Go 编程语言 b = append(b[:1], b...) 为什么能右移?
你的疑惑似乎都是切片的 append 带来的,可以找找切片的详细资料看看。
```
var b = make([]byte, 10, 10)
b2 := b[1:2] // 新切片从 b 的位置 1 开始,到 1 结束,长度只有 1, 但是容量是 b 的容量减开始的位置 1 等于 9
fmt.Println("b: ", b) // [0 0 0 0 0 0 0 0 0 0]
// b2 追加新元素,但容量是 10-1=9 ,长度是 1, 不触发扩容,改变了原切片 b 的第三元素
b2 = append(b2, 7)
fmt.Println("b: ", b) // [0 0 7 0 0 0 0 0 0 0]
// b3 容量是 1,长度是 1, 改变 b3 第一个元素会影响原切片 b 。
b3 := b[9:]
b3[0] = 6
b3 = append(b3, 8)
fmt.Println("b: ", b) // [0 0 7 0 0 0 0 0 0 6]
// 由于 b3 上面追加了新元素,触发扩容,b3 开辟了新空间,和原切片没有关系了,改变第一个元素不影响原切片
b3[0] = 5
fmt.Println("b: ", b) // [0 0 7 0 0 0 0 0 0 6]
```
18 天前
回复了 lysShub 创建的主题 Go 编程语言 b = append(b[:1], b...) 为什么能右移?
只是把数组 b 的第一个元素移动到最后,完了以后在数组 b 上新创建了切片 b2 ,只比数组 b 少了第一个元素。
后面用 SliceData 获取数组底层的第一个元素指针,数组 b 的指针+1 后就跑到底层的第二个元素指针,切片 b2 的第一个元素指针就是数组 b 的第二个元素。
20 天前
回复了 mythace 创建的主题 职场话题 太抽象了,绷不住了
你要看这系统是不是给人用的,比如这个项目做成之后的目的就是在材料里写“我们利用 AI 技术做出了什么什么系统,今后继续保持科技创新啥啥啥。”实际给领导演示过后根本没人用,这种情况你不需要关心太多,只要把门面完善好就行,细节啥的能省就省。
也就 Java 需要这么重的 IDE ,其他现代化的语言都是编辑器配个 LSP 就可以写了。
https://youtrack.jetbrains.com/issue/JBR-5672/Wayland-support-input-methods

可能 WLToolkit 还不支持 Input-Method-V3 或 V1 。
为什么你们的接口文档是这样的,更方便的做法难道不是使用 API 文档生成库,然后在入参和返回的结构体上添加注释吗?最后项目启动后可以在线浏览详细的接口文档,包含每个字段所需的类型、注释说明、参考值等,还能直接调用 API 测试。
参考: https://petstore.swagger.io/#/
32 天前
回复了 faywong8888 创建的主题 Linux CachyOS 看起来很适合极客/开发者
主页的特性感觉没什么亮点,然后大概率是自己的源混合 arch 的官方源,最后在某一天更新后,一些软件出现了问题。
36 天前
回复了 pureGirl 创建的主题 Web Dev 什么样的网站算设计精良的
我觉得 Rust 标准库的文档写的非常好,说明清晰,几乎都有示例。光看 LSP 的 Hover 提示就知道怎么用了。
71 天前
回复了 hahaha121 创建的主题 程序员 基于 ai 开发推荐系统的可行性?
如果标签系统好的话,推荐系统用不上昂贵的模型就能有好的效果。
所以可以在源头上使用昂贵的模型对文章或视频进行标签分析,建立完善的标签系统,剩下的就可以用廉价的模型进行推荐。
76 天前
回复了 sikuu2al 创建的主题 发音 优惠券读 quan 不读 juan。
我听到许多老厨师(老饭骨、东北大舅、老隐记等)把发酵(jiao)读作发酵(xiao),感觉以前发酵(xiao)是个比较广泛的读法?
坐骑(ji)和关卡(qia)也逐渐演变成坐骑(qi)和关卡(ka),语言没那么神圣,古往今来有大量的读法变迁,古文里还有那么多的通假字。
根据 unix 哲学,你可以基于多个工具组合成一个具备强大可定制功能的“截图工具”
比如在 hyprland 下:
1. 首先可以通过 slurp 在桌面上画出矩形,然后将 slurp 的输出结果存到某个地方(文件或环境变量)
2. 然后用 grim 读取 slurp 的结果,对之前在桌面上选择的区域进行截图,也可以结合 sleep 命令进行延时截图。
3. 最后通过 drawing (或 gimp )对 grim 的截图进行编辑,比如标注红框或模糊处理。

上面的操作可以分成多步命令,也可以合并成一条达到一键操作的目的。并且每一步操作都可以通过系统通知进行提示。
最后将这些命令通过 hyprland 的快捷键绑定系统绑定起来。

```
# screenshot
bind = $mainMod, S, exec, slurp > /tmp/geometry && notify-send "$(cat /tmp/geometry)"
bind = $mainMod SHIFT, S, exec, sleep 3 && grim -g "$(cat /tmp/geometry)" ~/Pictures/screenshots/grim_$(date +"%Y%m%d_%H%M%S").png && notify-send "Screenshot Done"
# record
bind = $mainMod SHIFT, E, exec, notify-send "wf-recorder started" && wf-recorder -g "$(cat /tmp/geometry)" -r 30 -f ~/Videos/rec_$(date +"%Y%m%d_%H%M%S").mp4 && notify-send "wf-recorder done"
bind = $mainMod ALT, E, exec, killall wf-recorder

```
让这三种类型并存:null 、nil 、undefined 。
并且这样写可以通过编译:

```
varlet foo: Foo = null;
foo = nil;
foo.bar();
```

语法尽量地少,比如函数是一等公民,但是当函数作为参数或变量时完全没有简化的写法,必须严格按照完全的语法来写,且强制格式化换行:
```
func do(callback: Callback) {
callback();
}
do(func() {
println("hell word")
})
```
1  2  3  4  5  6  7  8  9  10  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   993 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 149ms · UTC 20:08 · PVG 04:08 · LAX 13:08 · JFK 16:08
Developed with CodeLauncher
♥ Do have faith in what you're doing.