Programming Language Tips

/ 默认分类 / No comments yet / 244 browses

Scala

隐式转换为目标类型:把一种类型自动转换到另一种类型

def foo(msg : String) = println(msg)
> foo(10) //return error
implicit def intToString(x : Int) = x.toString
> foo(10) //return  10
-#-#- another userage -#-#-
def person(implicit name : String) = name
> person //return error
implicit val p = "fxxk"   //p被称为隐式值
> person //return "fxxk"

隐式转换的时机: 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都会被搜索

import scala.util.control.Breaks._

breakable {
  for (x <- xs) {
    if (Math.random < 0.1)
      break
  }
}

Python

日志存储

# log.txt会每次都清空重写
python script.py > log.txt
# pyhton脚本中加入以下代码可追加定向到指定文件,命令行参数可直接省略
import sys
f = open("log.txt", "a")
sys.stdout = f
...
f.close()

Go

当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用,这被称为导出;标识符如果以小写字母开头,则对包外是不可见的