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


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

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

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

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

.

  • 2016년 08월 23일에 작성됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 요즘은 개발은 주로 레일즈 사이트 수정하는 일을 하고, 예전에는 모바일 게임도 조금 만들어 봤습니다.

조회수 207


Banner slack 2x iegsyt

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