주어진 몇 가지 방법에 응답하는 객체가 있습니다. 나는 그들 중 일부를 해시에서 수집하고 싶다. 나는 항상 이런 식으로 쓴다.해시 값을 채우기위한 더 좋은 방법
class Person
# ...
def some_selected_attributes
attrs = {}
[:first_name, :last_name, :zip].each do |attr|
attrs[attr] = self.__send__(attr)
end
attrs
end
end
나는 이것을 수행하는보다 우아한 방법이있다.
: wq! Hash[]
를 사용하여, 또 다른 옵션을
def some_selected_attributes
[:first_name, :last_name, :zip].inject({}) do |hash, attr|
hash[attr] = __send__ attr
hash
end
end
:
def some_selected_attributes
{
first_name: first_name,
last_name: last_name,
zip: zip
}
end
또한 inject
으로 작업을 수행 할 수 있습니다 세 개의 속성이있을 때, 내가 직접 작성하지 않는 이유가 없습니다 참조
나는 주사를 언급하고 싶었다. 그러나 그것이 무엇을하는지 알았을지라도, 나는 항상 그것을 읽는 것이 까다로울 것입니다. 그래서 저는 종종'h = {};를 사용합니다. ...; 가독성을 위해 h를 반환합니다. – Deradon
감사합니다! 첫 번째 [DRY] (http://en.wikipedia.org/wiki/Don%27t_repeat_yourself)는 충분하지 않습니다. '주사하다 '는 올바른 방향으로 가고 있지만 읽기가 어렵다. 다른 아이디어? – iblue
마지막 편집을 참조하십시오. –