Ruby에서 실수로 구조화하기

5784 단어 bugrubytesting
가장 웃긴 일이 어제 나에게 일어났습니다. 지금 생각해도 재미있다. 그 당시에는 분명히 재미 없었습니다. 나는 실패한 가장 단순한 단위 사양에 대해 몇 시간 동안 고심했습니다.

내 테스트에서 볼 것으로 기대했던 응답:

{:response=>{
   "pspReference"=>"883598242852329J", 
   "resultCode"=>"Authorised", 
   "amount"=>{"currency"=>"AUD", "value"=>1000}
   },
 :header=>{ "Sandwich"=>"Eggplant-Parma-Sanga"},
 :status=>200}


도움이 되지 않는 실패 메시지:

TypeError:
  no implicit conversion of Symbol into Integer


코드를 응시합니다.
스펙을 바라보고 있다.
before 블록에서 바보 같은 짓을 했다고 생각합니다.

내 코드의 A binding.pry:response 키로 액세스할 수 있을 것으로 예상되는 해시가 배열 내부로 돌아오고 있음을 보여줍니다!

[{:response=>{"pspReference"=>"883598242852329J", "resultCode"=>"Authorised", "amount"=>{"currency"=>"AUD", "value"=>1000}},
  :header=>{"Sandwich"=>"Eggplant-Parma-Sanga"},
  :status=>200}, api_version]


당신은 m8을 잡았다!

오류를 식별하는 데 두 번째 눈이 필요했습니다.

def initialize(result:, api_version:)
  @result = result,    # <-------- this stray comma
  @api_version = api_version
end


그 엉뚱한 쉼표가 지적되자 나는 큰 소리로 웃었다.

저는 실수로 Ruby에서 Destructuring을 하고 있었고 여기에서 제 승리로 이런 일이 일어나고 있다는 사실을 알고 있었습니다! 그리고 이전에 Ruby에서 Destructuring에 대해 쓸 생각이었기 때문에 승리하시길 바랍니다 🤷‍♀️

Destructuring은 Common Lisp the Language, 2nd Edition에서 "일반적으로 단일 변수에 값을 바인딩할 수 있는 모든 위치에서 변수 집합을 해당 값 집합에 바인딩"하는 기능으로 설명됩니다.

Ruby에서는 다음과 같이 단일 변수에 값을 할당합니다.

my_choice_sandwich = "eggplant parma"

# irb(main):001:0> my_choice_sandwich
# => "eggplant parma"


Destructuring을 사용하면 다음과 같이 여러 값을 구분하는 간단한 쉼표로 여러 할당을 수행할 수 있습니다.

my_choice_sandwich = "crumbed eggplant", "sugo sauce", "mozzerella"

# irb(main):001:0> my_choice_sandwich
# => ["crumbed eggplant", "sugo sauce", "mozzerella"]


위에서 왼쪽에 있는 개체("변수")는 오른쪽에 여러 값을 전달하기 때문에 배열인 것을 볼 수 있습니다.

해당 값(왼쪽)으로 여러 변수(오른쪽)를 설정할 수 있습니다.

sandwich, pizzas = "salad", {vege: "mushrooms", meat: "aussie"}

# irb(main):001:0> sandwich
# => "salad"

# irb(main):001:0> pizzas
# => {:vege=>"mushrooms", :meat=>"aussie"}


위에는 다음이 표시됩니다.sandwich 오른쪽에 하나의 값만 할당되기 때문에 문자열을 반환합니다.
pizzas는 오른쪽의 해당 값이었던 해시를 반환합니다.

배우는 재미가 없다!

좋은 웹페이지 즐겨찾기