01/10/2018, 17:11
Cú pháp đoạn này là sao ạ
override def run = { val baddress = InetAddress.getByName(bindAddress) ss = Some(new ServerSocket(socksPort, 0, baddress)) while(running){ try{ ss.map(_.accept).map{ socket => ProtocolHandler(socket){ session.forward } } } catch { case e if e eq IOHandlerException => println(e) case e => println(e) } } }
em mới học scala lên github tìm mấy cái project nhỏ mà đọc code nó khó hiểu quá , đoạn while đó sao đối tượng socker lại gọi được method map @@ , còn đoạn map sau em đoán là callback
Bài liên quan
Trong Scala, có kiểu
Option[T]
có 2 giá trị làSome[T](value)
vàNone
. Class Optional có methodmap
.map
nhận tham số là 1 function.Đoạn code đầu là lambda expression, 1 dạng khác của function. Hai cách viết dưới đây đều như nhau. Tuy nhiên viết theo dạng
_
ngắn hơn, dễ đọc hơn.map
tiếp theo cũng nhận function, nhưng nhận theo kiểu closure, mà closure này lại nhận parameter theo dạng pattern maching. Vì vậy bạn đọc nó hơi khó hiểu chút.Hai đoạn code dưới đây tương đương với nhau:
Phần này mình trả lời thêm…
Class
Option[T]
có 2 subclasses làSome[T]
vàNone
.Some
có companion object, object đó có methodapply()
gọinew Some(...)
. Vì vậy có thể bỏ bớt từ khoánew
khi viết code.Hai đoạn code sau như nhau:
Phần
catch
cũng có thể sử dụng pattern matchingTất cả operator trong Scala đều là method, phép
+
cũng là 1 methodhix đúng là cùng sử dụng thư viện java mà thằng scala viết cú pháp khác hẳn java …thanks anh…