let,with,run,apply,also函数区别:let(适用于对一个可null对象统一做判空处理,返回值为函数块最后一行或指定return表达式,如item?.let { it -> })、with(调用一个类名多个方法时,可省去this,返回值为函数块最后一行或指定return表达式,如with(item){this.})、run(let和with结合体所以适用于let和with的任何场景,返回值为函数块最后一行或指定return表达式,如item?.let { it -> }?: run {})、apply(适用于run的任何场景,用于初始化对象然后返回对象,多个函数链式调用也可使用,返回this,如View.inflate(activity, R.layout.*, null).apply{})、also(适用于let的任何场景,用于多个函数链式调用,返回this,如item.also { it -> })