echo $VAR 有没有一种方法可以通过只执行 export.bash 而不 source 它获取 $VAR? 答: 不可以。 但是有几种可能的解决办法。...在调用 shell 的上下文中执行脚本: $ cat set-vars1.sh export FOO=BAR $ . set-vars1.sh $ echo $FOO BAR 另一种方法是在脚本中打印设置环境变量的命令.../set-vars2.sh)" $ echo "$FOO" BAR 在终端上执行 help export 可以查看 Bash 内置命令 export 的帮助文档: # help export export...-f 指 shell 函数 -n 从每个(变量)名称中删除 export 属性 -p 显示所有导出变量和函数的列表 ---- 参考: stackoverflow question 16618071...help eval 相关阅读: 用和不用export定义变量的区别 在shell编程中$(cmd) 和 `cmd` 之间有什么区别 ----
Kotlin 可以帮我们做到这点吗?不行,因为这些规则是无关于语言的。这仍然取决于开发者自己来创建小的函数。 然而,使用 Java 有时候很难写出小而富有表达力的函数。让我来举个例子。...不可变引用 在 Kotlin 中,我们应该一直使用 val 关键字来定义一个变量。这会创建一个不可变变量。在 Java 中,我们不得不额外添加 final 这个关键字(再次出现语法噪点!)。...注意 Kotlin 的集合并不是不可变的因为它是基于 Java 的可变性集合,这是迫于互操作性的原因。不过在实践中,大部分情况下这已经足够好了。...此外,如果仅有一个参数的话,我们可以省略 lambda 中参数的定义。这种情况下,我们可以用 it 代替这个参数。也只有在这种情况下, it 所表示引用的含义很明显。...不可变数据类 在 Kotlin 中使用 data class 能够非常容易地创建不可变数据类。实际上,这是 Kotlin 中一个杀手级特性。
作用域函数是 Kotlin 内置的,可对数据做一系列操作、变换的函数,与集合操作符类似,作用域函数不仅仅可被集合对象调用,它们还可以被所有对象调用。让我们来看看它们的用法。...函数名本来不能为纯数字或空格符,但是加上反引号就可以了!神奇!那么这有啥用?还记得 Kotlin 的 internal 访问修饰符吗?它限定了被它修饰的函数只能在当前模块使用,而不能在其他模块使用。...最后,这种反引号的用法不推荐使用!了解即可! 4. Kotlin 对象比较 在 Java 中,要比较两个对象是否相等,通常用的是 == 或 equals 方法。...Kotlin 的常量变量 根据笔记一中的内容,我们知道,Kotlin 有两种变量,一种是用 val 关键字修饰的不可变的变量;另一种是用 var 关键字修饰的可变的变量。...我理解的就是,Kotlin 中用 const 修饰的常量类似于 Java 中的一个不可变的静态变量。
我们来举个栗子: 创建一个Person类来表示一个“人”,创建一个“人”的集合,查找其中年纪最大的人,并打印结果。...这些语言允许你定义可以存储任何数据类型的变量,或者返回任何数据类型的函数,并在运行时才解析方法和字段引用。这会减少代码量并增加创建数据结构的灵活性。...- 不可变性——使用不可变对象,这保证了它们的状态在其创建之后不能再变化。 - 无副作用——使用的是纯函数。...lambda 表达式,让你用最少的样板代码方便地传递代码块 数据类,提供了创建不可变值对象的简明语法 标准库中包括了丰富的 API 集合,让你用函数式编程风格操作对象和集合 Kotlin 允许你使用函数式编程风格但并没有强制你使用它...当你需要的时候,可以使用可变数据,也可以编写带副作用的函数,而且不需要跳过任何多余的步骤。然后,毫无疑问的是,在 Kotlin 中使用基于接口和类层次结构的库就像 Java 一样简单。
这个例子定义了一个 Person 类来表示“人”,创建一个“人”的集合,查找其中年纪最大的人,并打印结果。尽管这是非常小的一段代码,从中也可以看到 Kotlin 许多有趣的特性。...不可变性——使用不可变对象,这保证了它们的状态在其创建之后不能再变化。 无副作用——使用的是纯函数。此类函数在输入相同时会产生同样的结果,并且不会修改其他对象的状态,也不会和外面的世界交互。...函数式编程风格的代码带来的第二个好处是多线程安全。多线程程序中最大的错误来源之一就是,在没有采用适当同步机制的情况下,在不同的线程上修改同一份数据。...lambda 表达式,让你用最少的样板代码方便地传递代码块 数据类,提供了创建不可变值对象的简明语法 标准库中包括了丰富的 API 集合,让你用函数式编程风格操作对象和集合 Kotlin 允许你使用函数式编程风格但并没有强制你使用它...当你需要的时候, 可以使用可变数据,也可以编写带副作用的函数,而且不需要跳过任何多余的步骤。然后,毫无疑问的是,在 Kotlin 中使用基于接口和类层次结构的库就像Java 一样简 单。
为您提供了方法来创建collections,我在这儿列出了不可变和可变版本的List,Set和Map。...Kotlin系列的编程除了默认的不变性外,还来自于Kotlin stdlib的扩展功能。如果您熟悉函数式编程,那么您将熟悉大部分功能。它们是一组辅助函数和更高级的辅助函数,可以为您的集合提供常用操作。...下一个例子进一步说明,甚至可以省略参数定义。在Kotlin中,默认情况下,一个参数lambdas会接收到一个名为it的参数名。没有必要去命名它。...它们在您的代码中也很明显,并使得高阶函数的使用变得简单。关于Kotlin和lambdas的最好部分是类型推断,当类型不匹配时,它就在你的代码下面出现一条红色的线。...Apply是另一个时髦的扩展功能,我们可以在很多情况下使用它,一个常见的用法的就是创建一个需要许多调用的对象,但是没有很好的方法来做到这一点。
在 Android上它也可以工作,这得益于紧凑的运行时、对Android API 特殊的编译器支持以及丰富的库,为常见Android开发任务提供了Kotlin 友好的函数。...2.函数式编程: 头等函数:把函数(一小段行为)当作值使用,可以用变量保存它,把它当作参数传递,或者当作其他函数的返回值。 不可变性:使用不可变对象,这保证了它们的状态在其创建之后不能再变化。...} 关键字 fun 用来声明一个函数。 参数的类型写在它的名称后面。 函数可以定义在文件的最外层,不需要把它放在类中。 数组就是类。...默认情况下,应该尽可能地使用 val 关键字 来声明所有的 Kotlin 变量,仅在必要的时候换成var。使用不可变引用、不可变对象及无副作用的函数让代码更接近函数式编程风格。...命名参数 Kotlin: 假设现在有一个函数,它的作用是在集合元素中添加分割符号,然后将集合转化为字符串。
因此,熟悉它们是学习一门新语言的必要步骤。 Kotlin对开箱即用的maps提供全面支持。首先,您可以在本地使用Java 的集合框架,这是业内最知名且久经考验的框架之一。...此外,Kotlin 添加了一些额外的功能,使maps使用起来更加方便。 在这篇文章中,我谈论的是maps的基础知识。我将向您展示处理maps时最常用的函数。...Kotlin 中maps的用途 在使用maps之前了解什么是maps。本质上,映射是键值对的集合。关键是标识符。您可以使用它来查找集合中的特定元素。该值是您要存储的数据,它与一个键相关联。...本质上,映射是键值对的集合。 数据类型的实现是?数据结构。maps的主要实现有两种: ?哈希表:它使用哈希函数来计算每个键的索引。这些对基于该索引进入一个桶数组。...但是,您应该知道大多数默认构造函数都会创建哈希表(例如 Java 中的?LinkedHashMap)。 支持 Kotlin Maps 的不变性 有趣的是,Kotlin 中maps的标准接口是不可变的。
大家可以发现,Kotlin这种语言它是有修饰函数,然后它的标识符是在fun这个函数后面,后面会紧跟着一个冒号。...现在我们看到的这个是val,这种是不可变的标识符。另外一种var是可变的标识符,我们可以对它进行重新赋值。在大多数情况下,我们会使用val这种不可变的变量,这也是函数类编程的一个基础思想。...接下来我这边又是有一个运算符的重载,就是“+=”,这个时候我们把color这个数组切割,让它从第3到第5这样序列的三个字符,然后加到mSet这个可变的集合当中。...接下来给大家展示的是如何能够确认一个词语是在一个集合当中,有两种方法,一种是用in,或者是用“.contains”这种方法能够确认。...当然,现在情况发生了一点改变,我觉得Kotlin是一门非常好的语言,所以现在Kotlin是我的第二喜欢的。我已经可以想像出来一个画面,我用Kotlin写一些我的项目,但是目前只是一个想象的东西。
这 3 种都是 集合接口,这些都和 Java 中的一样。 Kotlin 的集合也可以根据是否可变分为两大类:可变集合 和 不可变集合。...不可变集合就是集合中的元素是不可以被修改的,没有 add、remove 等写操作的方法。...当然,如果在声明的时候就知道集合里的元素,就可以使用这些函数进行初始化: // code 8 val list = listOf("a", "b", "c", "d") // 不可变集合声明 val...mutableMap = mutableMapOf("name" to "Tom", "age" to "99") // 可变集合声明 创建空集合的函数用的比较少,分别是 emptyList(...而且创建出来的都是只读类型的集合,又不能往里面放元素,所以用的少。 用的较多的当然还是构造函数,以 List 作为说明,Set 和 Map 以此类推。
// 代码清单6.21 创建一个包含可空值的集合 // 从一个文件中读取文本行的列表,并尝试把每一行文本解析成一个数字 fun readNumbers(reader...* 一般的规则是在代码的任何地方都应该使用只读接口,只在代码需要修改集合的地方使用可变接口的变体。.../**-------------------- 6.3.3 Kotlin集合和Java ----------------------*/ /* * 集合创建函数...而 Unit 类比于void 不会正常终止的函数使用 Nothing 类型作为返回类型。 Kotlin 使用标准 Java 集合类,并通过区分只读和可变集合来增强它们。...当你在 Kotlin 中继承 Java 类或者实现 Java 接口时,你需要仔细考虑参数的可空性和可变性。 Kotlin的Array 类就像普通的泛型类 但它会被编译成 Java 数组。
的方法: 3.1、用 val 而不是 var 在 Kotlin 中 val 代表只读,var 代表可变。建议尽可能多的使用 val。val 是线程安全的,并且不需要担心 null 的问题。...只需要注意 val 在某些情况下也是可变的就行了。对于普通变量来说,不可变( immutable )和只读( read-only )之间没什么区别。...这种情况下,我建议不要自定义 val 属性的 getter 方法。...4、Gson与Kotlin碰撞出的不安全操作 4.1、使用 data class 没有设置无参构造函数 在 Kotlin 中,不需要自己动手去写一个 JavaBean,可以直接使用 DataClass,...那么是什么原因导致的呢? 原因是:Person在被转Java代码时,只会生成一个包含两个参数的构造方法,没有提供默认的构造方法。Gson在通过反射创建对象时,会优先尝试获取无参构造函数。
java的各种痛点而产生的,利用kotlin可以大大减少开发过程中的代码量编写,有一套几乎可以杜绝空指针的机制,kotlin没有分号 二、如何运行Kotlin代码 郭霖大神这本第三行代码是在...AS里面运行的,当然我们也可以用idea运行,eclipse应该也可以多安装一个kotlin插件就ok,生成后缀为kt的kotlin文件,利用以下简单代码段即可编写第一个程序,与java的主函数很像,不过代码更加简洁...类与对象 类和java中的差不多,就是不用加new关键字了 继承与构造函数 java里面默认继承object类,而kotlin则默认不继承,需要加上open关键字才可以,继承只需要加上...数据类 :class前面加个data即可 单例类:创建类时使用object关键词 六、Lambda 编程 集合的创建以及使用 Set 不存放重复元素,map可以利用类似数组下标进行赋值...,list可以简化赋值 集合的函数式API lambda表达式的基本语法结构 {参数名1:参数类型,参数名2:参数类型 -> 函数体} 最后一行代码作为函数的返回值 Java函数式API
当我第一次使用 Kotlin 的时候,我以为val 和 var 的区别在于val 代表不可变,而 var 代表是可变的。但事实比这更加微妙:val 不代表不可变,val 意味着只读。。...这种情况下,我建议不要自定义 val 属性的 getter 方法。...这里一定要注意,如果你只是这样声明了一个object,Kotlin认为你是需要一个静态内部类。而如果你用一个变量去接收object表达式,Kotlin认为你需要一个匿名内部类对象。...我们前面说了,在一些明知是只读不可写不可变的变量,我们尽可能地用 val 去修饰它。而 lateinit 仅仅能修饰 var 变量,所以 by lazy 懒加载,是时候表演真正的技术了。...而我们的 ViewModel 中使用的 Java 代码,由于 Java 认为我们的 List 是可以为 null 的,所以导致了类型不匹配的崩溃。
不区分导入的是类还是函数,而且,它允许使用import关键字导入任何种类的声明。...when”代替“if” /** * Kotlin 中没有三元运算符,因为if有返回值 * 意味着: 可以用表达式语法重写eval函数,去掉return语句和花括号,使用if表达式作为函数体...Val关键字和var关键字分别用来声明只读变量和可变变量。 字符串模板帮组你避免繁琐的字符串拼接。在变量名称前加上 $ 前缀或者用 ${} 包围一个表达式,来把值注入到字符串中。...for、while、和 do-while 循环与java类似,但是for循环现在更加方便,特别是当你需要迭代map的时候,又或是迭代集合需要下标的时候。 简洁的语法 1…5 会创建一个区间。...Kotlin中的异常处理和java非常相似,除了Kotlin不要求你声明函数可以抛出异常。
不区分导入的是类还是函数,而且,它允许使用import关键字导入任何种类的声明。...when”代替“if” /** * Kotlin 中没有三元运算符,因为if有返回值 * 意味着: 可以用表达式语法重写eval函数,去掉return语句和花括号,使用if表达式作为函数体...for、while、和 do-while 循环与java类似,但是for循环现在更加方便,特别是当你需要迭代map的时候,又或是迭代集合需要下标的时候。 简洁的语法 1..5 会创建一个区间。...区间和数列允许Kotlin在for循环中使用统一的语法和同一套抽象机制,并且还可以使用in运算符和!in运算符来检查值是否属于某个区间。...Kotlin中的异常处理和java非常相似,除了Kotlin不要求你声明函数可以抛出异常。
再次接触Kotlin,对Kotlin的新特性又有了一个更加深刻的认识: Kotlin可谓取众多语言之精华!这一次我从爱变成了痴迷....,允许使用任何对象. ③ kotlin标准库中有setOf函数,可以创建出一个Set,会包含所有指定为函数实参的对象.条目顺序不重要,只要两个set中包含一样的条目,它们就是相等的. ④ 上面这些例子都是等式检查...语法不仅可以创建数字区间,还可以创建字符区间.这里迭代从A到F的字符. ② for 循环允许展开迭代中的集合的元素(这里是 map 键值对集合) : 把展开的结果存储到了两个独立的变量中 : letter...I/System.out: 123 说明: ① 和Java最大的区别是不用显示地抛出异常. ② kotlin 不区分受检异常和未受检异常.不用指定函数抛出的异常,而且可以处理也可以不处理异常....在变量名称前加上 前缀 或者 用{ }包围一个表达式,来把值注入到字符串中.③ 值对象类在kotlin中简洁的方式表示.④ kotlin 中的 if 是带返回值的表达式.⑤ when 表达式替代了
Kotlin没有去重复造轮子(Scala则是自己实现了一套集合类框架),而是在Java 类库的基础上进行了改造和扩展,引入了不可变集合类,同时扩展了大量方便实用的功能,这些功能的API 都在 kotlin.collections...另外,在Kotlin中集合类不仅仅能持有普通对象,而且能够持有函数类型的变量。...7.3 创建集合类 Kotlin中使用 listOf() 、setOf()、mapOf() 创建不可变的 List列表、Set集、Map映射表;使用mutableListOf() 、mutableSetOf...=y value=2 key=z value=3 7.5 映射函数 使用 map 函数,我们可以把集合中的元素,依次使用给定的转换函数进行映射操作,元素映射之后的新值,会存入一个新的集合中,并返回这个新集合...这个过程可以用下图形象地来说明 ? map 函数 在List、Set 继承的Iterable 接口中,和Map接口中都提供了这个 map 函数。
精确控制集合的编辑权限,有助于消除 bug 和设计良好的 API。 预先了解一个可变集合的只读视图和一个真正的不可变集合之间的区别是很重要的。...在非性能关键代码中创建 map 可以用一个简单的惯用法来完成:mapOf(a to b, c to d) 注意上面的 readOnlyView 变量(译者注:与对应可变集合变量 numbers)指向相同的底层...如果一个 list 只存在只读引用,我们可以考虑该集合完全不可变。...创建一个这样的集合的一个简单方式如下: val items = listOf(1, 2, 3) 目前 listOf 方法是使用 array list 实现的,但是未来可以利用它们知道自己不能变的事实,返回更节约内存的完全不可变的集合类型...对于可变集合类型这是不允许的,因为这将导致运行时故障。
, 3, 4, 6, 7, 9] 重要的是要注意我们使用了一个可变的集合。...*在以下部分中,我们将讨论: 比较器创建 处理空值 扭转订单 比较器规则扩展 为了简化Comparator的创建 *, * Kotlin带来了许多工厂方法,使我们的代码更具表现力。...作为参数,我们给出了可变数量的函数(排序规则),每个函数都返回一个Comparable对象。然后,将按顺序调用这些函数,直到生成的Comparable对象计算为不相等或直到调用所有函数。...结论 在本快速教程中,我们了解了如何使用sort,sortBy和sortWith方法对Kotlin中的集合进行排序。...之后,我们还使用kotlin.comparisons包来创建Comparator对象,并使用其他排序规则来增强它们。 可以在GitHub上找到所有这些示例和代码段的实现。
领取专属 10元无门槛券
手把手带您无忧上云