当前位置: 首页 > news >正文

国内产品网站w源码1688index网站制作

国内产品网站w源码1688,index网站制作,营销型企业网站建设的内容,建站公司现状原文链接#xff1a;http://www.cnblogs.com/MOBIN/p/5351900.html----------------------------------------------摘要#xff1a;通过隐式转换#xff0c;程序员可以在编写Scala程序时故意漏掉一些信息#xff0c;让编译器去尝试在编译期间自动推导出这些信息来#xf… 原文链接http://www.cnblogs.com/MOBIN/p/5351900.html----------------------------------------------摘要通过隐式转换程序员可以在编写Scala程序时故意漏掉一些信息让编译器去尝试在编译期间自动推导出这些信息来这种特性可以极大的减少代码量忽略那些冗长过于细节的代码。使用方式1.将方法或变量标记为implicit2.将方法的参数列表标记为implicit3.将类标记为implicitScala支持两种形式的隐式转换隐式值用于给方法提供参数隐式视图用于类型间转换或使针对某类型的方法能调用成功隐式值例1声明person方法。其参数为name类型Stringscala def person(implicit name : String) name //name为隐式参数 person: (implicit name: String)String 直接调用person方法 scala person console:9: error: could not find implicit value for parameter name: Stringperson^ 报错编译器说无法为参数name找到一个隐式值 定义一个隐式值后再调用person方法scala implicit val p mobin //p被称为隐式值 p: String mobin scala person res1: String mobin 因为将p变量标记为implicit所以编译器会在方法省略隐式参数的情况下去搜索作用域内的隐式值作为缺少参数。 但是如果此时你又在REPL中定义一个隐式变量再次调用方法时就会报错scala implicit val p1 mobin1 p1: String mobin1 scala person console:11: error: ambiguous implicit values:both value p of type Stringand value p1 of type Stringmatch expected type Stringperson^ 匹配失败所以隐式转换必须满足无歧义规则在声明隐式参数的类型是最好使用特别的或自定义的数据类型不要使用Int,String这些常用类型避免碰巧匹配 隐式视图隐式转换为目标类型把一种类型自动转换到另一种类型 例2将整数转换成字符串类型scala def foo(msg : String) println(msg) foo: (msg: String)Unitscala foo(10) console:11: error: type mismatch; found : Int(10) required: String foo(10) ^ 显然不能转换成功解决办法就是定义一个转换函数给编译器将int自动转换成String scala implicit def intToString(x : Int) x.toString intToString: (x: Int)Stringscala foo(10) 10 隐式转换调用类中本不存在的方法 例3通过隐式转换使对象能调用类中本不存在的方法 class SwingType{def wantLearned(sw : String) println(兔子已经学会了sw) } object swimming{implicit def learningType(s : AminalType) new SwingType } class AminalType object AminalType extends App{import com.mobin.scala.Scalaimplicit.swimming._val rabbit new AminalTyperabbit.wantLearned(breaststroke) //蛙泳 } 编译器在rabbit对象调用时发现对象上并没有wantLearning方法此时编译器就会在作用域范围内查找能使其编译通过的隐式视图找到learningType方法后编译器通过隐式转换将对象转换成具有这个方法的对象之后调用wantLearning方法 可以将隐式转换函数定义在伴生对象中在使用时导入隐式视图到作用域中即可如例4的learningType函数 还可以将隐式转换函数定义在凶对象中同样在使用时导入作用域即可如例4 例4 class SwingType{def wantLearned(sw : String) println(兔子已经学会了sw) }package swimmingPage{ object swimming{implicit def learningType(s : AminalType) new SwingType //将转换函数定义在包中} } class AminalType object AminalType extends App{import com.mobin.scala.Scalaimplicit.swimmingPage.swimming._ //使用时显示的导入val rabbit new AminalTyperabbit.wantLearned(breaststroke) //蛙泳 } 像intToStringlearningType这类的方法就是隐式视图通常为Int String的视图定义的格式如下      implicit def  originalToTarget (argument : OriginalType) : TargetType 其通常用在于以两种场合中 1.如果表达式不符合编译器要求的类型编译器就会在作用域范围内查找能够使之符合要求的隐式视图。如例2当要传一个整数类型给要求是字符串类型参数的方法时在作用域里就必须存在Int String的隐式视图2.给定一个选择e.t如果e的类型里并没有成员t则编译器会查找能应用到e类型并且返回类型包含成员t的隐式视图。如例3隐式类在scala2.10后提供了隐式类可以使用implicit声明类但是需要注意以下几点1.其所带的构造参数有且只能有一个 2.隐式类必须被定义在类伴生对象和包对象里 3.隐式类不能是case classcase class在定义会自动生成伴生对象与2矛盾 4.作用域内不能有与之相同名称的标示符 例5object Stringutils {implicit class StringImprovement(val s : String){ //隐式类def increment s.map(x (x 1).toChar)} } object Main extends App{import com.mobin.scala.implicitPackage.Stringutils._println(mobin.increment) } 编译器在mobin对象调用increment时发现对象上并没有increment方法此时编译器就会在作用域范围内搜索隐式实体发现有符合的隐式类可以用来转换成带有increment方法的StringImprovement类最终调用increment方法。 隐式转换的时机 1.当方法中的参数的类型与目标类型不一致时 2.当对象调用类中不存在的方法或成员时编译器会自动将对象进行隐式转换隐式解析机制 即编译器是如何查找到缺失信息的解析具有以下两种规则 1.首先会在当前代码作用域下查找隐式实体隐式方法  隐式类 隐式对象 2.如果第一条规则查找隐式实体失败会继续在隐式参数的类型的作用域里查找 类型的作用域是指与该类型相关联的全部伴生模块一个隐式实体的类型T它的查找范围如下 1如果T被定义为T with A with B with C,那么A,B,C都是T的部分在T的隐式解析过程中它们的伴生对象都会被搜索 2如果T是参数化类型那么类型参数和与类型参数相关联的部分都算作T的部分比如List[String]的隐式搜索会搜索List的 伴生对象和String的伴生对象 3 如果T是一个单例类型p.T即T是属于某个p对象内那么这个p对象也会被搜索 4 如果T是个类型注入S#T那么S和T都会被搜索 隐式转换的前提1.不存在二义性如例12.隐式操作不能嵌套使用如 convert1(covert2(x))y3.代码能够在不使用隐式转换的前提下能编译通过就不会进行隐式黑铁
http://www.zqtcl.cn/news/834882/

相关文章:

  • 广州做网站建设的公司哪家好网站建设运营公司
  • 网站集约化建设 技术国内永久在线免费建站
  • 极简资讯网站开发有什么免费推广项目的好软件
  • 网站有哪几种类型如何让百度分享按钮在网站每个页面都有
  • 北京市昌平建设工程招标网站网站建设要学哪些软件有哪些方面
  • 部队内网网站建设方案诱导视频网站怎么做
  • 安徽省美好乡村建设网站郑州网站建设 论坛
  • 手机网站怎么建设软件外包公司绩效考核内容
  • 北京最大的火车站网站免费推广方式
  • 外贸网站建设系统工程公司名称大全
  • 手机视频网站建站吴江区经济开发区建设工程网站
  • 网站建设存在哪些问题学校网站手机站的建设
  • 婚恋网站设计手机免费制作网站模板
  • 北京网站建设与维护公司网络组建方案设计
  • 自己做网站好还是凡科樱花动漫做网站
  • 自己做外贸开通什么网站wordpress万能主题
  • 网站建设中添加图片链接cad线下培训班
  • 网站建站系统程序长宁区网站建设网站制
  • 合肥网站建设合肥做网站wordpress 关于页面
  • 软件开发公司赚钱吗北京网站优化解决方案
  • 泰安的网站建设公司哪家好国外ps网站
  • 网站建设制作方案做字典网站开发
  • 安徽道遂建设工程有限公司网站汽车之家网页
  • 仙居网站建设贴吧马鞍山钢铁建设集团有限公司网站
  • 编写网站 语言微网站开发语言
  • 深圳网站建设优化网站建设与维护培训
  • 张家港网站开发wordpress后台登录地址改
  • 郑州做网站的公司哪家好做网站运营工资是不是很低
  • 做网站电销公司开发个网站怎么做
  • 廊坊做网站哪家好深圳快速网站制