2014-03-28 2 views
1

이것은 매우 간단해야하지만이 메서드를 작성하는 방법을 알 수는 없습니다.스칼라에서 메서드를 인수로 전달

max 또는 minseq 인 다음과 같은 기능을 원합니다.

def maxOrMin_2(seq: IndexedSeq[Int], maxMin: IndexedSeq[Int] => Int): Int = seq.maxOrMin 

을하지만 컴파일러는 value maxOrMin is not a member of IndexedSeq[Int]를 말한다 :

def maxOrMin_1(seq: IndexedSeq[Int], maxMin: IndexedSeq[Int] => Int): Int = maxMin(seq) 

하지만 그 대신 함수로 maxMin, 나는 내가 쓸 수 있도록이 IndexedSeq하는 방법 싶습니다. 또한

, 내가 maxOrMin_2를 호출 할 때 다음과 같이 (내가 그것을 작성하는 방법을 알아낼 수 있었다 가정) :

maxOrMin_2(IndexedSeq(1, 2, 3), IndexedSeq.max) 

나는 컴파일러 메시지가 : value max is not a member of object IndexedSeq합니다.

이 글을 쓰는 방법을 아는 것이 좋습니다. 감사.

업데이트 : 나는 방금 이런 문제를 해결할 수 있음을 발견했다.

maxOrMin_2(IndexedSeq(1, 2, 3), (xs: IndexedSeq[Int]) => xs.max) 

저도 조금 어리 석습니다. 그러나 더 좋은 방법이 없다면 나는 그것이 가능할 것이라고 생각합니다.

업데이트 : 이제는 어떻게 호출해야합니까? maxOrMin_1이 정상적으로 작동합니다.

maxOrMin_1(IndexedSeq(1, 2, 3), (xs: IndexedSeq[Int]) => xs.max) 

더 좋은 답변이 있습니까?

+0

일반적으로 대답은 아마도 "업데이트"와 비슷할 것입니다. 즉 "기능 프로그래밍"입니다. 그러나 현실 세계에서 문제가 발생했다면 나는 한 걸음 물러서서 자신이하려는 것을 확실히하기 위해 관련된 유형과 기능 서명을 살펴 보시기 바랍니다. 스칼라와 같이 강력한 형식의 언어에서는 함수 "fooOrBar"를 호출하면 실제로 foo와 bar뿐만 아니라 baz가 전달되도록 허용 할 때 이상하게 보입니다. –

+0

'max' 또는'min'을 원합니다. 거기에 매개 변수를 제한하는 방법이 있습니까? 더 큰 그림 : 이것은 플레이어에 따라 최대 또는 최소를 취하는 미니 맥스의 일부입니다. 나는 미니 맥스가 쓰여질 수 있다는 것을 알고있다.,'max',하지만 만약 내가 이것을 원한다면 어떻게 향상시킬 수 있을까? – RussAbbott

+0

부울을 선택하지 않는 이유는 무엇입니까? –

답변

0

함수를 사용하는 대신 max 또는 min 메서드를 직접 호출하는 것이 더 쉽습니다. 그래서 대신 :

val input = IndexedSeq(1, 2, 3) 

maxOrMin_1(input, (xs: IndexedSeq[Int]) => xs.max) 
maxOrMin_1(input, (xs: IndexedSeq[Int]) => xs.min) 

당신은 직접 전화 : 당신은 여전히 ​​원래의 기능을 원하는 경우에, 당신은 전화 프로그램을 더욱 간결하게 만들 수 있습니다

input.max 
input.min 

입력을 위해와 위해 (별도의 인수 목록을 무두질하여 스칼라 더 나은 형식 유추를 생산하는 기능) :

def maxOrMin_1(seq: IndexedSeq[Int])(maxMin: IndexedSeq[Int] => Int): Int = maxMin(seq) 

다음 다음 호출과 같이

maxOrMin_1(input)(_.max) 
maxOrMin_1(input)(_.min)