Tôi đã đọc rằng câu lệnh if trong scala luôn trả về một biểuscala người mới gặp rắc rối với Option, tương đương với các nhà điều hành ternary
Vì vậy, tôi đang cố gắng để làm như sau (pseudo code)
là những gìsql = "select * from xx" + iif(order.isDefined, "order by " order.get, "")
tôi đang cố gắng với
val sql: String = "select * from xx" + if (order.isDefined) {" order by " + order.get} else {""}
Nhưng tôi nhận được lỗi này:
illegal start of simple expression
trật tự là một lựa chọn [Chuỗi]
Tôi chỉ muốn có một tham số tùy chọn đến một phương pháp, và nếu điều đó tham số (theo thứ tự trường hợp này) không được thông qua sau đó chỉ cần bỏ qua nó
gì sẽ là cách thành ngữ nhất để đạt được những gì tôi đang cố gắng làm?
- chỉnh sửa -
Tôi đoán tôi vội vã lên quá nhiều yêu cầu
tôi thấy cách này,
val orderBy = order.map(" order by " + _).getOrElse("")
Đây có phải là đúng cách để làm điều đó?
Tôi nghĩ bản đồ đã được dành cho các mục đích khác ...
Lý do mã của bạn không biên dịch là vì bạn cần dấu ngoặc đơn xung quanh ' if' biểu thức. Nhưng như Tomasz Nurkiewicz chỉ ra, có những cách tốt hơn để viết này anyway. –
Bất cứ ai muốn bình luận về * tại sao * chúng ta cần dấu ngoặc xung quanh if-expression (khác với "vì nó biên dịch")? –
@LuigiPlinge đây chỉ là suy đoán, nhưng có thể là họ muốn tránh nhầm lẫn lập trình viên về cách biểu thức như '1 + if (b) 2 else 3 + 4' sẽ liên kết. Có phải '1 + (nếu (b) 2 else 3) + 4' hoặc '1 + (nếu (b) 2 else 3 + 4)'? Chắc chắn bạn có thể có một ngữ pháp giải quyết sự mơ hồ này (Haskell), nhưng điều đó không có nghĩa là mọi người sẽ không phạm sai lầm vì họ giả định một hành vi khác. –