2013-06-13 2 views
1

아래 코드의 문제점을 이해하는 사람이 도와 줄 수 있습니까? 문제는 "조인"메서드 내부입니다 - "상태"필드를 설정할 수 없습니다. 오류 메시지는 -MappedEnum - 암시 적보기를 사용할 수 없음

No implicit view available from code.model.Membership.MembershipState.Val => _14.MembershipState.Value. 
[error]   create.member(user).group(group).state(MembershipState.Accepted).save 
[error]              ^
[error] one error found 
[error] (compile:compile) Compilation failed 

무엇을 의미합니까? 내가 MappedGender와 비슷한 일을 시도하고 예상대로 작동하므로 MappedEnum이 실패하는 이유는 무엇입니까?

스칼라 2.10 리프트 2.5

감사

package code 
package model 

import net.liftweb.mapper._ 
import net.liftweb.util._ 
import net.liftweb.common._ 


class Membership extends LongKeyedMapper[Membership] with IdPK { 
    def getSingleton = Membership 


    object MembershipState extends Enumeration { 
    val Requested = new Val(1, "Requested") 
    val Accepted = new Val(2, "Accepted") 
    val Denied = new Val(3, "Denied") 
    } 

    object state extends MappedEnum(this, MembershipState) 
    { 
    override def defaultValue = MembershipState.Requested 
    } 

    object member extends MappedLongForeignKey(this, User) { 
    override def dbIndexed_? = true 
    } 


    object group extends MappedLongForeignKey(this, Group) {  
    override def dbIndexed_? = true 
    } 

} 

object Membership extends Membership with LongKeyedMetaMapper[Membership] { 
    def join (user : User, group : Group) = {  
     create.member(user).group(group).state(MembershipState.Accepted).save 
    } 
} 

답변

1

MembershipClass 외부에서 MembershipState 열거를 옮겨보십시오. 나는 이것을 시도 할 때까지 당신과 같은 오류를 겪고있었습니다. 이유는 모르겠지만 코드를 컴파일 한 후에

1

_14는 컴파일러에서 생성 한 중간 익명 값을 의미합니다. 즉, 컴파일러는 더 나은 방식으로 찾고있는 유형을 표현하는 방법을 알지 못합니다.

그런데 과거를 보면 컴파일러가 [...]에서 Val ... [...] 로의 변환을 찾고 있음을 알 수 있습니다. 나는 변화

val Requested = new Val(1, "Requested") 

val Requested = Value(1, "Requested") 

이 오류를 수정할 것이라고 생각합니다.

은 (당신이 "새로운 발"스타일을 집어 어디 궁금 하군요?)

은 무엇 이상한 것은 발 실제로 가치를 확장한다는 것이다. 그래서 외부 유형이 올바르게 알려지면 (홀수 _14로 추측되지 않음) Val vs. Value는 문제가되지 않습니다. 여기서 문제는 어떤 이유에서 Lift가 setter가 현재 사용되지 않는 뷰 경계 구문을 사용하도록 정의한다는 것입니다. 아마도 이는 컴파일러가 직선으로 가고 입력 유형을 예상 유형에 맞추기보다는 양쪽에서 시작하여 시작 유형과 필수 유형을 정의한 다음 암시 적보기 기능을 검색하기 시작합니다 그 둘을 조정할 수 있습니다.

관련 문제