2014-09-01 3 views
1

나는 이런 식으로 뭔가를 할 수 있습니다 (!)스칼라 함수에서 매개 변수 객체를 전달하는 방법은 무엇입니까? 자바 스크립트

var parameters = {} 
for (object in objects) { 
    if (someCondition(object)) { 
     parameters.[object.getName()] = object.getValue(); 
    } 
} 
myFunction(parameters) 

생각은하지 함수에 배열로 매개 변수를 수집하고 객체로 전달하는 것입니다. 스칼라와 어떤 점이 유사합니까?

+0

매개 변수 [object.getName()] 잘못 ... 매개 변수 –

답변

0

사례 클래스로 시도해보십시오. 기본값을 기본 매개 변수로 정의하십시오.

case class Parameters(
    param1:String = "a" 
    param2:Int = 1 
) 

val params = Parameters("b", 2) 
myFunction(params) 

val paramsWithDefault = Parameters() 
myFunction(paramsWithDefault) 

당신은 스칼라의 붙박이 기능 (케이스 클래스 및 기본 값)와 JQuery와 $.extend 행동 같은 것을 얻을 수 있습니다. 그러나 실제로 자바 스크립트는 정적 언어 인 객체를 병합 할 수있는 동적 언어입니다. 컴파일 타임에 객체를 정의합니다. 여기에서 우리가하는 일은 정확히 객체를 병합하는 것이 아닙니다.

parameter objects을 사용하면 코드의 명확성을 위해 스칼라에서는 일반적이지 않습니다.

+0

만약에 후 점을 사용할 필요'myFunction'는 경우 클래스에서 이미입니까? :) – Cherry

+0

매개 변수의 경우 클래스에 없습니다. myFunction이 어디에 있는지는 중요하지 않습니다. – tiran

1

이것은 Map이 사용 된 것입니다. JavaScript에서는 "레코드"와 "사전"에 대해 서로 다른 객체를 사용합니다. 스칼라 및 대부분 정적으로 입력 된 언어에서는 사전 사용 사례 대신 Map을 사용합니다. Map의 장점 중 하나는 JS 사전에 비해 키가 String과 다른 유형일 수 있다는 점입니다. 위에서 매우 필수적이며,이 같은 기능적인 스타일로 재 작성 될 수 있음을

import scala.collection.mutable 

val parameters = mutable.Map.empty[String, ObjClass] 
for (obj <- objects) { 
    parameters(obj.name) = obj.value 
} 
myFunction(parameters) 

참고 :

그래서 나는 ObjClassobject의의 클래스 인으로, 다음과 같이 예를 번역하는 것 :.

val parameters = (
    for (obj <- objects) 
    yield obj.name -> obj.value 
).toMap 
+0

목표는 Map 또는 tuple 객체를 전달하지 않고 1 또는 2 이상의 매개 변수로 myFunction을 호출하는 것입니다. 'val parameters = ((obj <- objects)의 경우 obj.name -> obj.value) .toMap'은 매개 변수 객체가 아닌'Map'을 반환합니다. – Cherry

+0

@Cherry 당신의'parameters' 객체는 본질적으로 스칼라에서'Map'으로 구현 된 연관 배열과 같은 방식으로 작동합니다. 당신은 똑같은 행동을하지만, 잃어버린 것은 고정 타입 유추와 검증입니다. 이것은 정적으로 타이핑 된 언어의 주요 이점 중 하나입니다. –

+0

@Cherry 나는 그것을 얻지 못한다. 'myFunction'의 정의는 무엇입니까? – sjrd

관련 문제