这个:SomeObject =>对象构造

时间:2016-07-20 23:58:29

标签: scala

我正在阅读有关实施Slick的最佳做法,并正在审核this example。在其中,有这个结构:

    public class printerObject
{
    public SocketTCPClient tcpSocket;
    public string printerIP;
    public string printerName;
    string dataBuffer;

    public void initializing(string Data)
    {
        dataBuffer = Data;
        if (tcpSocket==null)
        {
            tcpSocket = new clsSocketTCPClient();
            tcpSocket.tcpSocketEvent += tcpSocket_tcpSocketEvent;
            tcpSocket.ReceiveTerminator = "\r\n";
            tcpSocket.SendTerminator = "\r\n";
        }

        //Check if data in buffer
        if (dataBuffer.Length == 0)
            return;

        //Connect to printer
        tcpSocket.Connect(printerIP, portNumber);
        Cosole.WriteLine("Connected")
    }

    private void tcpSocket_tcpSocketEvent(int ClientHandle, SocketTCPClient.EventCodes EventCode, string Data)
    {
        //Send data, once confirm connected
        switch (EventCode)
        {
            //case CONNECTED:
            case SocketTCPClient.EventCodes.Status_Connected:
                tcpSocket.SendData(dataBuffer);
                break;

            case SocketTCPClient.EventCodes.Status_DataSent:
                dataBuffer = "";
                tcpSocket.CloseSocket();
                break;

            case SocketTCPClient.EventCodes.Status_Disconnect:
                    break;
            case SocketTCPClient.EventCodes.Error_Receiving:
                    break;
            case SocketTCPClient.EventCodes.Error_Sending:
                    break;
            case SocketTCPClient.EventCodes.Error_Connect:
                    break;
        }
    }
}

我不理解trait BankRepository extends BankTable { this: DBComponent => ... //A bunch of code } 部分。在这种情况下,this: DBComponent =>是其他地方定义的简单特征(您可以在上面的链接中找到它)。我不明白的是:

  • DBComponent构建做什么。我的IDE没有抱怨,但它也没有链接到this: DBComponent =>正在执行的功能。我的直觉是它说其余代码是返回的值,但我不清楚调用它的是什么,或者返回的值是什么。
  • 我甚至称这个结构为何?与许多符号重的构造一样,很难查找/查找文档,因为它明显依赖于上下文。但即使描述背景也很困难。这个结构叫做什么?

1 个答案:

答案 0 :(得分:4)

它被称为自我类型。它基本上是一个合同,表示任何扩展这种特性的类(混合在一起)必须包括DBComponent。并且,因此,编译器应该假定DBCompenent元素在以下代码的范围内。

这里' sa link来自 Scala编程的描述,Odersky等,第1版(有点过时,但在大多数主题上仍然准确)。