2016-11-27 1 views
1

이 루비 코드를 살펴 보자.해시를 로컬 변수로 초기화 할 때 키 이름을 반복하지 않습니까?</p> <pre><code>red = '#f00' green = '#0f0' colors = {red: red, green: green} </code></pre> <p>마지막 줄의 반복은보기 흉한입니다 :

const red = '#f00' 
const green = '#0f0' 
const colors = {red, green} // creates {red: '#f00', green: '#0f0'} 

루비에서 유사한 무언가를 달성 할 수있는 방법이 있나요 :

ES6의 자바 스크립트에서

, 멋진 바로 가기가?

+1

짧은 대답은 아니오입니다. 이런 식으로 동작하는 내장 함수는 없으며, 가장 잘 알고 있듯이 해시 생성을 위해'{}'을 오버로드 할 수 없습니다. –

답변

0

Ruby에는 이러한 구문이 없습니다. 정말 좋은

red = '#f00' 
green = '#0f0' 
colors = Hash[[:red, :green].map { |v| [v, eval(v.to_s)] }] 

이인가 :

그러나 같은 일을 할 수 있을까? 아마도 두 개의 키만있는 것은 아니지만 아마도 수십 개의 키가있을 것입니다.

여기에는 eval()을 사용하여 변수 값을 가져옵니다. 신뢰할 수있는 데이터에서만 실행하십시오! 인스턴스 변수 인 경우 (안전) instance_variable_get :

@red = '#f00' 
@green = '#0f0' 
colors = Hash[[:red, :green].map { |v| [v, instance_variable_get("@#{v}")] }] 
관련 문제

 관련 문제