의외로 안쓰셔서인지, irb 에서 한글이 안먹는데 대해 글이 없군요.
매버릭에 기본으로 설치된 루비는 dlopen 따위나 권한문제가 계속 생기더군요. 애플께서 디폴트로 2.0.0p247 이 설치해 주셨음에도 불구하고, 이걸 못쓰네요. 결국 rbenv 를 동원해서 설치하는 했는데요.
설치는 http://blog.55minutes.com/2013/09/rails-os-x-install-guide에서 설명하는대로 따라가면 잘 됩니다. (중간에 brew install qt 는 부담스러워서 안했습니다)
다만, rbenv install 하는 장면에서
brew install readline export RUBY_CONFIGURE_OPTS=--with-readline-dir="$(brew --prefix readline)" CFLAGS=-O3 rbenv install 2.0.0-p247 라고 하셔야 irb에서 한글 입력이 됩니다.
그리고, 앞의 링크에 postgres 설치하는 부분이 있는데요.
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.