"where"关键字是什么意思?

 手机用户2502856555 发布于 2023-01-11 22:59

我无法理解这句话的确切含义.

let x where x.hasSuffix("pepper")

这是什么意思?

注意:没有必要let使用?这让我感到困惑..这够了x where x.hasSuffix("pepper")吗?因为,let x应该已经被分配了.

更新: 来自@Jacky在这里评论,它可能与下面的含义相同.

let x = vegetable 
if (x.hasSuffix("pepper")
 ......

Rui Peres.. 18

where在这方面被用作模式匹配.从示例:

case let x where x.hasSuffix("pepper"):

x匹配的后缀时"pepper",它将设置常量vegetableComment:

let vegetableComment = "Is it a spicy \(x)?"

你也可以看到它x不能是"芹菜","黄瓜"或"水田芥",否则它会给你一个不同的结果:

case "celery":
    let vegetableComment = "Add some raisins and make ants on a log."
case "cucumber", "watercress":
    let vegetableComment = "That would make a good tea sandwich."

因为那些案子以前case let x where x.hasSuffix("pepper"):.您可以尝试更改它们的顺序并传递值"celery"以查看不同的结果.

编辑:

根据我的理解,x 如果 x后缀是"胡椒",它会创建一个常量.创建此常量的目的是让您在此之后使用它:

let vegetableComment = "Is it a spicy \(x)?"

编辑2:

经过一番研究,这称为价值绑定,它被描述为:

switch case可以将它匹配的值绑定到临时常量或变量,以便在case的主体中使用.这称为值绑定,因为值"绑定"到案例正文中的临时常量或变量.

摘录自:Apple Inc."The Swift Programming Language."iBooks.https://itun.es/gb/jEUH0.l

2 个回答
  • where在这方面被用作模式匹配.从示例:

    case let x where x.hasSuffix("pepper"):
    

    x匹配的后缀时"pepper",它将设置常量vegetableComment:

    let vegetableComment = "Is it a spicy \(x)?"
    

    你也可以看到它x不能是"芹菜","黄瓜"或"水田芥",否则它会给你一个不同的结果:

    case "celery":
        let vegetableComment = "Add some raisins and make ants on a log."
    case "cucumber", "watercress":
        let vegetableComment = "That would make a good tea sandwich."
    

    因为那些案子以前case let x where x.hasSuffix("pepper"):.您可以尝试更改它们的顺序并传递值"celery"以查看不同的结果.

    编辑:

    根据我的理解,x 如果 x后缀是"胡椒",它会创建一个常量.创建此常量的目的是让您在此之后使用它:

    let vegetableComment = "Is it a spicy \(x)?"
    

    编辑2:

    经过一番研究,这称为价值绑定,它被描述为:

    switch case可以将它匹配的值绑定到临时常量或变量,以便在case的主体中使用.这称为值绑定,因为值"绑定"到案例正文中的临时常量或变量.

    摘录自:Apple Inc."The Swift Programming Language."iBooks.https://itun.es/gb/jEUH0.l

    2023-01-11 23:12 回答
  • case let x where x.hasSuffix("pepper")
    

    简单的解释是,你不能匹配的情况下,这是一个类型的String,有.hasSuffix()因为它返回一个Bool.因此,他们会为您提供此where模式匹配关键字以供使用.它的工作原理如下:

      let x 将传递给开关的String值复制到常量x.

      where是一个布尔值的评估,它只会让案例完成匹配,如果给出一个真正的bool,就像一个if块.

      hasSuffix()返回所需的bool where.

    如果你的字符串变量传入交换机是var foo.你可以改为:

    case foo where foo.hasSuffix("pepper")
    

    你可以把一个真正的bool传递到这样的地方,它会工作,无用:

    case foo where true
    

    2023-01-11 23:23 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有