官术网_书友最值得收藏!

  • Learn Scala Programming
  • Slava Schmidt
  • 321字
  • 2021-06-10 19:35:46

Infix types

In the same way that Scala has infix operators, it has infix types. An infix type, such as Op B, is just any type that has exactly two type operands. It is equivalent to the type defined as Op[A, B]Op may be any valid identifier.

The type operators have the same associativity as term operators—they are left associative unless an operator ends in : (colon), in which case it is right associative. Consecutive infix operators must have the same associativity. Let's look at an example to understand what this means:

type Or[A, B]
type And[A, B]
type +=[A, B] = Or[A, B]
type =:[A, B] = And[A, B]

type CC = Or[And[A, B], C]
type DA = A =: B =: C
type DB = A And B And C

// type E = A += B =: C // wrong associativity
type F = (A += B) =: C

Here, we defined four types, all of which have two type parameters and so can be used as infix types. Then, we define a type called CC, which expresses some relation between the A, B, and C types. The DA and DB type definitions show what the type definition looks like in infix notation. The first attempt to define some type, E, to be the same as the C type fails because of the different associativity of the types, =+ and =:, and we have demonstrated how parentheses can be used to work around this rule.

If used properly, infix types can greatly improve the readability of the code:

type |[A, B] = Or[A, B]
type [A, B] = And[A, B]
type G = A B | C

Here, we can see how infix types allow you to define type relation in a way that looks similar to Boolean operations.

主站蜘蛛池模板: 平乐县| 栾城县| 古浪县| 乌拉特中旗| 织金县| 辉南县| 紫云| 彭泽县| 灌南县| 锡林浩特市| 潜江市| 华池县| 东城区| 莱州市| 高陵县| 驻马店市| 汾西县| 合山市| 准格尔旗| 新竹市| 岗巴县| 揭西县| 泽普县| 吴江市| 乐至县| 阳谷县| 青川县| 黑河市| 北碚区| 岢岚县| 宁化县| 汝阳县| 农安县| 阳江市| 旺苍县| 肥东县| 宜宾市| 德钦县| 霍邱县| 固安县| 沙雅县|