Reason
  • 문서
  • 해보기
  • API
  • 커뮤니티
  • 블로그
  • Languages icon한국어
    • 日本語
    • English
    • Deutsch
    • Español
    • Français
    • Português (Brasil)
    • Русский
    • Українська
    • 中文
    • 繁體中文
    • 번역 돕기
  • GitHub

›Advanced Features

소개

  • What & Why

Setup

  • 설치
  • 에디터 플러그인

언어 기본

  • 개요
  • Let 바인딩
  • 원시 타입
  • 기본 자료구조
  • 타입
  • 레코드
  • Variant
  • Options and nullability
  • 함수
  • 재귀
  • 비구조화
  • 패턴 매칭
  • Mutable Bindings
  • 반복문
  • Modules

Advanced Features

  • JSX
  • 외부 접근
  • 예외
  • 오브젝트

JavaScript

  • 연동
  • 문법 치트시트
  • Pipe First
  • 프라미스
  • 라이브러리
  • JS에서 변환

추가 사항

  • 자주 물어보는 질문
  • 추가적으로 매력적인 것들
Translate

오브젝트

Most of time in Reason, you'd be using record to group named values together. In certain niche situations, however, you might want to use a similar feature called object; they're a bit more flexible and come with different tradeoffs.

사용

타입 정의

An object doesn't need a type declaration, though it can have one. It looks like a record, except with a .:

type tesla = {
  .
  color: string
};

The dot at the beginning indicates that this is a "closed" object type, which means that an object based on this type must have exactly this shape.

type car('a) = {
  ..
  color: string
} as 'a;

Two dots, also called an elision, indicate that this is an "open" object type, and therefore can also contain other values and methods. An open object is also polymorphic and therefore requires a parameter.

생성

Simple

type tesla = {
  .
  color: string,
};

let obj: tesla = {
  val red = "Red";
  pub color = red;
};

Js.log(obj#color) /* "Red" */

Here we have a simple object with the method color and the property red. This method takes no arguments and returns the private property red. Because the method color is a public method we can access it using object notation. Remember, objects only export methods and all properties are private.

Advanced

type tesla = {.
  drive: int => int
};

let obj: tesla = {
  val hasEnvy = ref(false);
  pub drive = (speed) => {
    this#enableEnvy(true);
    speed
  };
  pri enableEnvy = (envy) => hasEnvy := envy
};

This object is of object type tesla and has a public method drive. It also contains a private method enableEnvy that is only accessible from within the object.

As you can see, a Reason object can also access this. JavaScript object's this behavior can be quirky; Reason this always points to the object itself correctly.

The following example shows an open object type which uses a type as parameter. The object type parameter is required to implement all the methods of the open object type.

type tesla('a) = {
  ..
  drive: int => int
} as 'a;

let obj: tesla({. drive: int => int, doYouWant: unit => bool}) = {
  val hasEnvy = ref(false);
  pub drive = (speed) => {
    this#enableEnvy(true);
    speed
  };
  pub doYouWant = () => hasEnvy^;
  pri enableEnvy = (envy) => hasEnvy := envy
};

You can use the above object like so:

obj#doYouWant();
← 예외연동 →
  • 사용
    • 타입 정의
    • 생성
  • Simple
  • Advanced