기본적으로 RPG 유형의 Rails 애플리케이션이 있습니다. 스킬 데이터베이스에 스킬 데이터베이스를 저장하는 중입니다. 이름, 최소 레벨, 스킬 타입, 공식DB에 저장된 코드를 실행하는 방법은 무엇입니까?
내 수식이 현재 String으로 저장됩니다. 아이디어는 "1000 * min_level"과 같은 말을하고 어떻게 든 그것을 실행하여 기술 손상을 계산합니다.
이렇게하는 좋은 방법이 있습니까?
기본적으로 RPG 유형의 Rails 애플리케이션이 있습니다. 스킬 데이터베이스에 스킬 데이터베이스를 저장하는 중입니다. 이름, 최소 레벨, 스킬 타입, 공식DB에 저장된 코드를 실행하는 방법은 무엇입니까?
내 수식이 현재 String으로 저장됩니다. 아이디어는 "1000 * min_level"과 같은 말을하고 어떻게 든 그것을 실행하여 기술 손상을 계산합니다.
이렇게하는 좋은 방법이 있습니까?
응용 프로그램 논리에 응용 프로그램 논리를 유지하는 것이 가장 좋지만 eval()을 사용하는 간단한 문제 일 수 있습니다.
eval("1000 * %i" % min_level)
많은 기술이있을 수 있으며 그 기술을 하드 코드하고 싶지 않습니다. – Karl
저는 (관리자 인터페이스를 통해) 게임 관리자로 편집 할 수있는 SkillConfig 모델을 만드는 것이 좋습니다. 승수를 거기에 넣으면 결과 = skill_config.foo_multiplier * skill.min_level 또는 무엇을 할 수 있습니다. 이점은 a) 하드 코딩 된 로직이없고 b) 잠재적으로 악용 가능한 eval()을 사용하지 않는 것입니다. – bojo
나중에 시간대에 따라 손상을 구현하기로 결정하면 어떻게됩니까? 이를 구현하기 위해서는 단일 메서드를 수정하는 것과는 대조적으로 모든 기존 기술의 구현을 중단해야합니다. – Karl
eval을 사용할 수 있습니다. min_level이 범위에있는 변수이면 중간 단계없이 Ruby로 해당 문자열을 실행할 수 있습니다.
그런 식으로 코드를 실행할 수있는 보안 문제가 많습니다. 이 문자열이 어디에서 오는지에 달려 있습니다.
더 안전하게 만들 수있는 좋은 방법이 있습니까? 내가 처리하고자하는 유한 수의 변수가 있다고 말하면서, 나는 그 외의 다른 변수에 대한 액세스를 어떻게 든 제한 할 수 있습니까? – Karl
그러나 최종 사용자가 문자열을 입력 할 것으로 기대하지는 않습니다. 그것은 단지 일종의 관리자에 의해서만 수행 될 것이고, 나는 아직도 조금주의를 기울이고 있습니다. – Karl
이 스킬 데이터를 입력/편집하는 "관리자"는 먼저 Ruby에 대한 충분한 지식이 있어야합니다 (적어도 논리가 어떻게 작동하는지 파악하기에 충분해야 함). 처음. 잘못 입력 된 논리가 실행되거나 실행되지 않거나 원하지 않는 결과를 생성 할 수 있기 때문에 잠재적 인 실패 지점입니다. – bojo
은 어쩌면 당신은 그 사이에 일을 시도 할 수 있습니다 : (?) 관리자가 직접 이러한 식을 편집 할 수 없습니다 만, 중간에 서 것 몇 가지 간단한 파서를 작성하는 것
하지 마십시오. 그냥 하지마. –
합리적인 대안이 있습니까? 관리자가 새로운 기술을 정의 할 수는 있지만 응용 프로그램을 수정할 필요는 없습니다. – Karl