后定义的 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"
}
1
wdhwg001 2022-07-07 16:56:19 +08:00
这…你要是希望 IDE 能在非编译期报个警,估计得是 TypeScript 这种有图灵完备的类型系统的才行吧。
编译期报个警就行了的话,估计各种支持宏的编程语言都能做得到。 |
2
mxT52CRuqR6o5 2022-07-07 18:12:29 +08:00 via Android
|
3
mxT52CRuqR6o5 2022-07-07 18:15:48 +08:00 via Android
或者说你这个属于逻辑错误,需要程序员自己去解决的
|
4
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 ?不太可能吧 |
5
andyJado OP @GeruzoniAnsasu @mxT52CRuqR6o5 @wdhwg001
🙇♀️抱歉, 统一回复下, 孩子不是在抬杠, 被 xcode 写 app 时体验喂太饱了,比如, 一个视图上的变量更新没用更新在 MainActor 都要被骂, 像这种存在歧义但不放声的情况真的第一次遇到. |
6
mxT52CRuqR6o5 2022-07-07 20:03:38 +08:00 via Android
@andyJado 我没做过 ios 开发,不是很清楚"一个视图上的变量更新没用更新在 MainActor"具体是指什么。
我假设是指你在开发 ios 应用时,xcode 不仅能报告语言错误,还能检测出 ios 前端框架的错误使用方式,那其实也很正常,换成其他 ide 的话就属于是框架开发了个 ide 插件可以检测出框架错误的使用方式,xcode 和 ios 开发框架都是苹果自家的,能做这种事不奇怪 |
7
andyJado OP |
8
MakHoCheung 2022-07-07 20:35:49 +08:00
这种需要苹果给 Xcode 加上支持或者 Vapor 官方开发个 Xcode 的插件
|
9
afutureus 2022-07-07 20:40:28 +08:00 via iPhone
可以看一下 Vapor 源码的 RoutesBuilder 部分。你可以提一个 PR ,让 RoutesBuilder 支持 重复添加的检测。
|
10
sutra 2022-07-07 21:06:52 +08:00
Vapor 不行。
|
11
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 |
12
NXzCH8fP20468ML5 2022-07-07 23:02:30 +08:00
C#的 aspnet coree 也不行,运行时抛错
|
13
iOCZ 2022-07-07 23:14:24 +08:00
xcode 还是个孩子
|
14
abctt 2022-07-08 01:38:59 +08:00 via iPhone
intellij idea 可以
|
15
foxwe10 2022-07-08 01:53:06 +08:00 via iPhone
这种情况和 Xcode 有什么关系呢,你写好的代码没有编译错误,执行结果不如你的预期,这不就是代码写的 bug 吗。
Swift 的 async/await 模型本身没问题,视图变量都应该是要求在主线程操作的,给你报 runtime warning 也没毛病吧。 |
16
andyJado OP @foxwe10 我的意思是 xcode 棒...我这个例子就是为了说明它它它很细心, 我就不用把这些东西放脑袋里了.
|
18
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 ,(通常来说,具体还要看语言的语法规则)这个规则是运行时规则,或者代码跑起来才能出错的规则,所以基本检测工具没有检测它的要求,高级或者专项检测工具才会检测它。 |
19
LLaMA2 2022-07-08 15:58:45 +08:00
我能理解 OP 的痛苦,我写 nestjs 时也遇到过,后来得人工注意。
但这个问题不是语言层面上的错误,甚至说这中写法是允许的。 但在业务中,大多数时候这种情况应该是写错了。 所以我倾向于框架限制或 IDE 告警,提醒用户这里有不合理的地方。至于最终定夺则由人或人事先确定好的 rules 决定报错或者无视 |