🙋CRUD 入门: 是所有语言都这样还是 xcode 的 Vapor 不行?

2022-07-07 16:31:34 +08:00
 andyJado

后定义的 Read 请求直接覆盖了前面的, xcode 屁声不放

    app.get("hello","vapor") { req in
        return "helo, vapor"
    }
    // TODO: covered last same path
    app.on(.GET, "hello","vapor") { req in
        return "wow"
    }
3169 次点击
所在节点    Xcode
19 条回复
wdhwg001
2022-07-07 16:56:19 +08:00
这…你要是希望 IDE 能在非编译期报个警,估计得是 TypeScript 这种有图灵完备的类型系统的才行吧。

编译期报个警就行了的话,估计各种支持宏的编程语言都能做得到。
mxT52CRuqR6o5
2022-07-07 18:12:29 +08:00
@wdhwg001 这种编译期也报不了警吧,只能运行时报警
@andyJado xcode 又不可能去理解框架的细节来告诉你这样写会有问题
mxT52CRuqR6o5
2022-07-07 18:15:48 +08:00
或者说你这个属于逻辑错误,需要程序员自己去解决的
GeruzoniAnsasu
2022-07-07 18:34:59 +08:00
你好,编译器顶多能理解语法,它们绝大多数情况下不理解 on 和 get 是什么语义。

a.b
a.b

后面的 b 覆盖了前面的 b ,这是一个纯语法问题

a.b
a.c

c 和 b 是不同的语义,我怎么知道 c 会覆盖 b ?不太可能吧
andyJado
2022-07-07 19:44:30 +08:00
@GeruzoniAnsasu @mxT52CRuqR6o5 @wdhwg001

🙇‍♀️抱歉, 统一回复下, 孩子不是在抬杠, 被 xcode 写 app 时体验喂太饱了,比如,

一个视图上的变量更新没用更新在 MainActor 都要被骂, 像这种存在歧义但不放声的情况真的第一次遇到.
mxT52CRuqR6o5
2022-07-07 20:03:38 +08:00
@andyJado 我没做过 ios 开发,不是很清楚"一个视图上的变量更新没用更新在 MainActor"具体是指什么。
我假设是指你在开发 ios 应用时,xcode 不仅能报告语言错误,还能检测出 ios 前端框架的错误使用方式,那其实也很正常,换成其他 ide 的话就属于是框架开发了个 ide 插件可以检测出框架错误的使用方式,xcode 和 ios 开发框架都是苹果自家的,能做这种事不奇怪
andyJado
2022-07-07 20:18:59 +08:00
@mxT52CRuqR6o5

就异步交给其他 cpu 处理的一些数据返回来, 更新到视图上的这一步, 如果没有在代码中显式标注“你回到主 queue 了”的话, 可以运行但会紫色警告.
MakHoCheung
2022-07-07 20:35:49 +08:00
这种需要苹果给 Xcode 加上支持或者 Vapor 官方开发个 Xcode 的插件
afutureus
2022-07-07 20:40:28 +08:00
可以看一下 Vapor 源码的 RoutesBuilder 部分。你可以提一个 PR ,让 RoutesBuilder 支持 重复添加的检测。
sutra
2022-07-07 21:06:52 +08:00
Vapor 不行。
sutra
2022-07-07 21:44:04 +08:00
正经点的框架至少搞个警告:
21:42:34.231 WARN [http-nio-8080-exec-3] org.apache.cxf.jaxrs.model.OperationResourceInfoComparator.compare(OperationResourceInfoComparator.java:126) Both org.oxerr.freeradius.resource.DebugResource#getPI and org.oxerr.freeradius.resource.DebugResource#hello are equal candidates for handling the current request which can lead to unpredictable results
21:42:34.232 WARN [http-nio-8080-exec-3] org.apache.cxf.jaxrs.model.OperationResourceInfoComparator.compare(OperationResourceInfoComparator.java:126) Both org.oxerr.freeradius.resource.DebugResource#getPI and org.oxerr.freeradius.resource.DebugResource#hello are equal candidates for handling the current request which can lead to unpredictable results
xxfye
2022-07-07 23:02:30 +08:00
C#的 aspnet coree 也不行,运行时抛错
iOCZ
2022-07-07 23:14:24 +08:00
xcode 还是个孩子
abctt
2022-07-08 01:38:59 +08:00
intellij idea 可以
foxwe10
2022-07-08 01:53:06 +08:00
这种情况和 Xcode 有什么关系呢,你写好的代码没有编译错误,执行结果不如你的预期,这不就是代码写的 bug 吗。
Swift 的 async/await 模型本身没问题,视图变量都应该是要求在主线程操作的,给你报 runtime warning 也没毛病吧。
andyJado
2022-07-08 09:12:10 +08:00
@foxwe10 我的意思是 xcode 棒...我这个例子就是为了说明它它它很细心, 我就不用把这些东西放脑袋里了.
andyJado
2022-07-08 09:13:40 +08:00
@sutra 太对了哥, 谢谢哥!
nothingistrue
2022-07-08 09:58:15 +08:00
首先通过搜索发现,xcode 是 IDE ,Vapor 是 Swift 语言的一个玩意。所以楼主的问题应该是:是所有开发( IDE 、语言、框架)都这样还是 Xcode 下 的 Vapor 框架不行?

如果产生的错误,是运行时报了错误,app 这个对象不允许重新定义 GET 请求,那么:所有编程语言都是这样,所有 IDE 肯定不会报编译或者语法错误,专项程度高的 IDE 会报警告级别的错误。

原因:
1 ,不允许重新定义 GET 请求这个规则,是由 app 这个类,或者 Vapor 框架的规则,不是 Swift 语言的语法规则,所以它铁定不是语法错误,最多只能是警告
2 ,(通常来说,具体还要看语言的语法规则)这个规则是运行时规则,或者代码跑起来才能出错的规则,所以基本检测工具没有检测它的要求,高级或者专项检测工具才会检测它。
LLaMA2
2022-07-08 15:58:45 +08:00
我能理解 OP 的痛苦,我写 nestjs 时也遇到过,后来得人工注意。
但这个问题不是语言层面上的错误,甚至说这中写法是允许的。
但在业务中,大多数时候这种情况应该是写错了。
所以我倾向于框架限制或 IDE 告警,提醒用户这里有不合理的地方。至于最终定夺则由人或人事先确定好的 rules 决定报错或者无视

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/864711

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX