1. Rails 의 changed? 레일즈에 얼마나 많은 기능이 있는걸까. 책 본지 너무 오래되었고, 쓰는 기능만 쓰기 때문에 벌어진 사건.
CSV 파일을 읽어서 SQL 테이블에 넣는 작업을 하는데, CSV 파일은 주기적으로 새 버전이 올라온다. 그러면 기존의 값들과 비교해서 바뀐 것이 있으면 관리자에게 알려주어야 한다는 요구사항이 있었다.
어느 레코드의 어느 필드가 바뀌었는지 확인하는 기능을 구현하는 것이, CSV 이 여러개이고, SQL테이블과 1:1 대응도 아니기 때문에 복잡해보였다. 이런 저런 안을 내고, 고민하고 코드를 만들었는데, 며칠을 헤맨뒤에야 ActiveRecord 의 changed?
www.slideshare.net/aalmiray/jfokus-functional-groovy에 나온 깔끔한 그루비 코드를 보고 루비로도 가능한지 궁금해졌습니다.
클로저는 아주 유용한 녀석입니다. 대체로 따로 선언해서 사용하기 보다는 루프나 함수호출에 인자로 전달하는 경우가 많고, 그래서 관련 문법을 잘 모르고 지나쳤었는데, 덕분에 한번 뒤져보았습니다.
첫번째 코드는 그루비의 클로저.
def dub = {int base, int factor -> base * factor } assert 4 == dub(2,2) assert 4 == dub.call(2,2) 이걸 루비로 고쳐보면 다음과 같습니다.
a = lambda{|base,factor| base*factor} puts a.call(2,3) puts a.