2011-03-30 1 views
1

오늘부터 스칼라를 시작했는데 흥미로운 문제가 발생했습니다. ,스칼라 : 표현식에 단순한 의미로 '암시 적 변환을 적용 할 수 없음'

 
error: type mismatch; 
    found : Int 
    required: java.lang.Object 
Note that implicit conversions are not applicable because they are ambiguous: 
    ... 
    for (c <- s) { 
     ^
one error found 

내가 몇 가지로 루프를 변경 시도 :

class Example { 
    def forString(s: String) = { 
    for (c <- s) { 
     // ... 
    } 
    } 
} 

을하며 지속적으로 메시지와 함께 실패 : 나는 표현을위한이 같은처럼 문자열의 문자 반복을 실행하고 문자열의 길이를 사용하고 테스트 용으로 하드 코딩 된 숫자를 사용하는 것을 포함하지만 아무 소용이 없습니다. ... 웹이 중 어떤 것도 양보하지 않았다 검색

편집 :

class Example { 
    def forString(s: String) = { 
    for (c <- s) { 
     println(String.format("%03i", c.toInt)) 
    } 
    } 
} 

오류가 동일하다 :이 코드는 여전히 오류를 산출하는 동안 나는 그것을 줄일 수있는 가장 작은 컴파일 타임에 발생합니다. '통역사'에서 달리면 같은 결과가 나온다.

+2

더 많은/모든 코드를 표시하면 도움이됩니다. 표시되는 코드 스 니펫은 괜찮은 것 같습니다. – Fabian

+1

문제를 나타내는 우편 번호입니다. 게시물이 너무 길면 문제점을 표시하는 가장 작은 표본을 얻을 때까지 줄을 제거하십시오. 문제가 무엇인지 알 수 있습니다. –

답변

1

. 대신 암시 적으로 변환 된 RichString.format 메서드를 사용하십시오. 그것은 당신을위한 기본 요소를 넣을 것입니다. 즉

[email protected]:~$ scala 
Welcome to Scala version 2.8.0.final (Java HotSpot(TM) Client VM, Java 1.6.0_21). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> class Example { 
    | def forString(s: String) = { 
    |  for (c <- s) { 
    |  println("%03i".format(c.toInt)) 
    |  } 
    | } 
    | } 
defined class Example 

scala> new Example().forString("9") 
java.util.UnknownFormatConversionException: Conversion = 'i' 

더 가깝지만 그렇지는 않습니다. 형식 문자열로 "%03d"을 사용해보십시오.

scala> "%03d".format("9".toInt) 
res3: String = 009 
0

나는 (추가에 println과) 코드를 시도하고 2.8.1에서 작동 :

class Example { 
    | def forString(s:String) = { 
    | for (c <- s) { 
    | println(c) 
    | } 
    | } 
    | } 

사용할 수 있습니다 : 원시 String.format 방법을 사용하지 마십시오

new Example().forString("hello") 
h 
e 
l 
l 
o 
+0

_same_ 코드를 사용하면 어떨까요? – Blaisorblade

1

스칼라 2.81는 다음을 생산하고, 명확 오류 :

scala> def forString(s: String) = { 
    | for (c: Char <- s) { 
    | println(String.format("%03d", c.toInt.asInstanceOf[AnyRef])) 
    | }} 
forString: (s: String)Unit 

scala> forString("ciao") 
099 
105 
097 
111 
:

scala> class Example { 
    | def forString(s: String) = { 
    |  for (c <- s) {    
    |  println(String.format("%03i", c.toInt)) 
    |  }           
    | }           
    | }            
<console>:8: error: type mismatch;     
found : Int          
required: java.lang.Object       
Note: primitive types are not implicitly converted to AnyRef. 
You can safely force boxing by casting x.asInstanceOf[AnyRef]. 
      println(String.format("%03i", c.toInt))   
           ^       

고려 및 String.format에 대한 다른 제안을 복용, 여기에 위의 코드에 대한 최소한의 수정입니다

이 경우에는 암시 적 형식을 사용하는 것이 더 좋지만 Java varargs 메서드를 다시 호출해야 할 경우를 대비하여 alw ays.

+0

어느 대답을 선택할지 고심했지만, 마침내 +1을 선택했습니다. –

+0

동의합니다. 이 대답은 해당 코드 유형 확인을 수행하는 방법을 설명하지만 다른 대답은 내가 말한 것처럼 더 잘 작성해야하는 코드를 설명합니다. 그래서 그들은 보완 적입니다. 어쨌든 고마워, 고마워! – Blaisorblade

+0

최소값은'c : 정수 '입니다. –

관련 문제