2013-05-21 35 views
5

Xin chào tất cả mọi người Tôi đang cố gắng để hiểu được biểu tượng "_" trong scala, nó trông giống như một ký tự đại diện nhưng tôi không hiểu tại sao trong kịch bản nhất định.lý do tại sao scala giữ chỗ không làm việc

var l = List("a","b" ,"c") 
    // Works "s" works as a variable. 
    l.foreach(s => 
    if(s=="a"){ 
     print(s) 
    } 
    ) 

    // Works _ takes the place of "s" 
    l.foreach(
    print(_) 
    ) 

    //So the doubt is whether "_" is a wildcard that does not work well. 

    l.foreach(
    if(_=="a"){ 
     print(_) 
    } 
) 

"_" phải hoạt động như biến s, nhưng tại sao lại không?

+0

Tôi đảm bảo 99,8973% rằng '_' hoạt động tốt. Đó là cách bạn đang sử dụng nó, hoặc những gì bạn đang mong đợi của nó, đó là vấn đề. – cHao

+4

Bạn nên đọc http://stackoverflow.com/questions/8000903 trong số những thứ khác. Bạn đang pha trộn sử dụng dấu gạch dưới, tôi nghĩ. (Ngoài ra, dấu gạch dưới có thể được sử dụng chính xác một lần cho mỗi biến, dấu gạch dưới thứ hai cố gắng liên kết với biến thứ hai, không phải là dấu đầu tiên lần thứ hai. } 'không phải. Nếu bạn cần tham chiếu đến cùng một biến nhiều lần, hãy đặt tên nó là:' foreach {x => x * x} ').) –

Trả lời

12

Ký tự đại diện trong các hàm ẩn danh được mở rộng theo cách mà n-th _ được coi là đối số thứ n. Cách bạn đang sử dụng nó làm cho trình biên dịch scala nghĩ rằng bạn thực sự có một cái gì đó như

l.foreach((x,y) => 
    if(x=="a"){ 
     print(y) 
    } 
) 

Rõ ràng là không hợp lệ.

+6

Nó phân tích thành' l.foreach ({if ((x) = > x == "a") {(y) => in (y)}}) ', mặc dù. – Debilski

Các vấn đề liên quan