我正在阅读有关实施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 =>
正在执行的功能。我的直觉是它说其余代码是返回的值,但我不清楚调用它的是什么,或者返回的值是什么。答案 0 :(得分:4)
它被称为自我类型。它基本上是一个合同,表示任何扩展这种特性的类(混合在一起)必须包括DBComponent
。并且,因此,编译器应该假定DBCompenent
元素在以下代码的范围内。
这里' sa link来自 Scala编程的描述,Odersky等,第1版(有点过时,但在大多数主题上仍然准确)。