Ruby에서 eval의 정확한 역할이 뭔가요? 그리고 쓰면 안좋다는데 정말 그런가요?


Rails에서 작업중에 eval을 쓰고싶은 문제가 있습니다. JSON 인풋을 받아서 DB에 저장하는 경우였는데요.

JSON Array를 입력 받아서 DB에 저장하니 문자열로 "[1, 2, 3]"이렇게 저장이 되더군요. 그래서 eval을 하고 저장했는데요.

eval에 대해 검색하다보니 eval은 왠만하면 안쓰는게 좋다는 글을 봤습니다.

eval대신 어떤 방법을 쓰면 좋을까요?

.

  • 2016년 08월 23일에 작성됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 모바일 게임도 조금 만들어 봤습니다.

조회수 130


1 답변


좋아요
2
싫어요
채택취소하기

eval은 동적으로 구문을 생성/평가/실행하는 용도로 사용합니다

  • 장점 : 동적 구문 생성, 바인딩, 실행. 메타프로그래밍에 유용.
  • 단점 : 느림, 스코프를 넘어선 자원 접근, 보안. ex) Kernel#system - system('shell command')

문자열로 변환해서(표준 라이브러리 json의 #to_json) 데이터베이스에 적재할 수 있고, 적재된 문자열은 JSON.parse로 파싱해서 다룰 수 있습니다.

# rspec_test on irb
require 'json'
require 'rspec'
include RSpec::Matchers

json_str = {hi: "sup", yo: "hey"}.to_json

# 1. 문자열을 Hash로 파싱
parsed = JSON.parse(json_str ) 
expect( parsed.class ).to eq Hash
expect( parsed["hi"] ).to eq "sup"

# 2. Hash를 #to_json으로 문자열 변환
expect( parsed.to_json ).to eq json_str 
expect( parsed.to_json.class ).to eq String
  • 2016년 08월 23일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close