V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
andyJado
V2EX  ›  Xcode

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

  •  
  •   andyJado · 2022-07-07 16:31:34 +08:00 · 3800 次点击
    这是一个创建于 871 天前的主题,其中的信息可能已经有所发展或是发生改变。

    后定义的 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"
        }
    
    19 条回复    2022-07-08 15:58:45 +08:00
    wdhwg001
        1
    wdhwg001  
       2022-07-07 16:56:19 +08:00
    这…你要是希望 IDE 能在非编译期报个警,估计得是 TypeScript 这种有图灵完备的类型系统的才行吧。

    编译期报个警就行了的话,估计各种支持宏的编程语言都能做得到。
    mxT52CRuqR6o5
        2
    mxT52CRuqR6o5  
       2022-07-07 18:12:29 +08:00 via Android
    @wdhwg001 这种编译期也报不了警吧,只能运行时报警
    @andyJado xcode 又不可能去理解框架的细节来告诉你这样写会有问题
    mxT52CRuqR6o5
        3
    mxT52CRuqR6o5  
       2022-07-07 18:15:48 +08:00 via Android
    或者说你这个属于逻辑错误,需要程序员自己去解决的
    GeruzoniAnsasu
        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 ?不太可能吧
    andyJado
        5
    andyJado  
    OP
       2022-07-07 19:44:30 +08:00
    @GeruzoniAnsasu @mxT52CRuqR6o5 @wdhwg001

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

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

    就异步交给其他 cpu 处理的一些数据返回来, 更新到视图上的这一步, 如果没有在代码中显式标注“你回到主 queue 了”的话, 可以运行但会紫色警告.
    MakHoCheung
        8
    MakHoCheung  
       2022-07-07 20:35:49 +08:00
    这种需要苹果给 Xcode 加上支持或者 Vapor 官方开发个 Xcode 的插件
    afutureus
        9
    afutureus  
       2022-07-07 20:40:28 +08:00 via iPhone
    可以看一下 Vapor 源码的 RoutesBuilder 部分。你可以提一个 PR ,让 RoutesBuilder 支持 重复添加的检测。
    sutra
        10
    sutra  
       2022-07-07 21:06:52 +08:00
    Vapor 不行。
    sutra
        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
    NXzCH8fP20468ML5
        12
    NXzCH8fP20468ML5  
       2022-07-07 23:02:30 +08:00
    C#的 aspnet coree 也不行,运行时抛错
    iOCZ
        13
    iOCZ  
       2022-07-07 23:14:24 +08:00
    xcode 还是个孩子
    abctt
        14
    abctt  
       2022-07-08 01:38:59 +08:00 via iPhone
    intellij idea 可以
    foxwe10
        15
    foxwe10  
       2022-07-08 01:53:06 +08:00 via iPhone
    这种情况和 Xcode 有什么关系呢,你写好的代码没有编译错误,执行结果不如你的预期,这不就是代码写的 bug 吗。
    Swift 的 async/await 模型本身没问题,视图变量都应该是要求在主线程操作的,给你报 runtime warning 也没毛病吧。
    andyJado
        16
    andyJado  
    OP
       2022-07-08 09:12:10 +08:00
    @foxwe10 我的意思是 xcode 棒...我这个例子就是为了说明它它它很细心, 我就不用把这些东西放脑袋里了.
    andyJado
        17
    andyJado  
    OP
       2022-07-08 09:13:40 +08:00
    @sutra 太对了哥, 谢谢哥!
    nothingistrue
        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 ,(通常来说,具体还要看语言的语法规则)这个规则是运行时规则,或者代码跑起来才能出错的规则,所以基本检测工具没有检测它的要求,高级或者专项检测工具才会检测它。
    LLaMA2
        19
    LLaMA2  
       2022-07-08 15:58:45 +08:00
    我能理解 OP 的痛苦,我写 nestjs 时也遇到过,后来得人工注意。
    但这个问题不是语言层面上的错误,甚至说这中写法是允许的。
    但在业务中,大多数时候这种情况应该是写错了。
    所以我倾向于框架限制或 IDE 告警,提醒用户这里有不合理的地方。至于最终定夺则由人或人事先确定好的 rules 决定报错或者无视
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5635 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 07:26 · PVG 15:26 · LAX 23:26 · JFK 02:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.