Ruby에서 실수로 구조화하기
내 테스트에서 볼 것으로 기대했던 응답:
{: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
는 오른쪽의 해당 값이었던 해시를 반환합니다.배우는 재미가 없다!
Reference
이 문제에 관하여(Ruby에서 실수로 구조화하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/melissakaulfuss/accidentally-destructuring-in-ruby-37e4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)