2013-08-23 4 views
1

제가 생각하기에 스칼라 구문에서 버그/무 구문 - 센스라고 생각되는 것이 있습니다 만, 잘못된 것으로보고 한 후에 여기에 게시하는 것을 선호합니다.스칼라 구문 버그?

컨트롤러 클래스 :

package some 

import java.awt.event.ActionListener 
import java.awt.event.ActionEvent 

class ItemController extends ActionListener { 

    val NEW_ITEM = "new item" 
    val UPDATE_ITEM = "update item" 

    private val newItem = new ItemNew 

    override def actionPerformed(e: ActionEvent) = { 

    } 

    def create(view: String) = { 

    view match { 
     case NEW_ITEM => { 
     newItem eraseForm //Here eclipse says "Unit does not take parameters". 
     newItem setVisible true 
     } 

     case UPDATE_ITEM => 
    } 

    } 

} 

클래스

package some 

    import scala.collection.mutable.HashMap 
    import javax.swing.JPanel 
    import java.awt.GridLayout 
    import javax.swing.JFrame 
    import scala.collection.mutable.LinkedHashMap 
    import javax.swing.JTextField 
    import java.awt.BorderLayout 
    import java.awt.FlowLayout 
    import javax.swing.JLabel 

    class ItemNew extends JFrame { 

    private val formFields = LinkedHashMap[String, JTextField]() 

    init 

    private def init(): Unit = { 
     // defining form fields 
     formFields += ("name" -> new JTextField(20), 
     "surname" -> new JTextField(20), 
     "age" -> new JTextField(3)) 

     setLayout(new BorderLayout) 

     val formPanel = new JPanel 
     formPanel setLayout (new GridLayout(formFields.size, 1)) 

     generateForm(formPanel) 
     getContentPane add formPanel 

     pack 
     setVisible(true) 

     def generateForm(formPanel: JPanel) = { 

     var leftPanel: JPanel = null 
     var rightPanel: JPanel = null 
     var gridPanel: JPanel = null 

     formFields foreach (entry => { 

      leftPanel = new JPanel(new FlowLayout) 
      leftPanel.getLayout().asInstanceOf[FlowLayout] setAlignment FlowLayout.LEFT 

      rightPanel = new JPanel(new FlowLayout) 
      rightPanel.getLayout.asInstanceOf[FlowLayout] setAlignment FlowLayout.LEFT 

      gridPanel = new JPanel(new GridLayout(1, 2)) 

      leftPanel add new JLabel(entry._1 + ':') 
      rightPanel add entry._2 

      gridPanel add leftPanel 
      gridPanel add rightPanel 

      formPanel add gridPanel 

     }) 
     } 
    } 

    def getFormContent: HashMap[String, String] = { 

     val formData = HashMap[String, String]() 

     formFields foreach (entry => { 
     formData += (entry._1 -> entry._2.getText) 
     }) 

     return formData 
    } 

    def eraseForm : Unit = { 
     formFields foreach (entry => { 
     entry._2 setText "" 
     }) 
    } 

    private def addListeners = { 

    } 

    } 

는 ItemController의 클래스의 설명을 참조보기. 주석이있는 문장과 newItem setVisible true 사이에 빈 줄을두면 코드에 오류가 없습니다.

미리 감사드립니다.

답변

5
newItem eraseForm 
newItem setVisible true 

newItem.eraseForm(
newItem).setVisible(true); 

하지만 당신이 원하는대로 해석되는 것은 :

newItem.eraseForm; 
newItem.setVisible(true); 

는 점과 괄호를 떠나 스칼라 컴파일러는 "연산자 표기법을"적용된다는 것을 의미한다. 즉 표현식의 형식은 항상 obj meth param이어야합니다. obj meth;이 가능하지만이 양식은 세미콜론으로 중지해야합니다. 혼자서 삽입하거나 컴파일러가 빈 줄을 추가하거나 다음 줄에 키워드로 시작하는 식 또는 닫는 중괄호와 괄호를 추가하여 컴파일러가이를 유추 할 수 있습니다.

2.33 이후로 이라고 쓰면 경고 메시지가 나타납니다. 이러한 접미사 연산자는 질문에서 볼 수있는 것처럼 해를 끼칠 수 있기 때문입니다.

:

두 질문은 "운영자 표기"규칙에 대한 자세한 내용은 답이보기