2016-03-29 12 views
5

Scalastyle (IntelliJ 2016,1 giá trị mặc định) cho biết biểu thức boolean này có thể được đơn giản hóabiểu Scalastyle Boolean có thể được đơn giản hóa

val t = Option(true) 
val f = Option(false) 
if(t.contains(true) && f.contains(false)) { 
    println("booop") 
} 

tôi có thể thoát khỏi điều này bằng cách thay đổi nếu để:

if(t.contains(true).&&(f.contains(false))) 

Hoặc bởi thay đổi & & đến &

Nhưng không thực sự thấy cách đơn giản hóa nó, ai cũng có thể khám phá n chuyện gì vậy?

Cập nhật Nó dường như không liên quan đến nếu các vals được biết lúc biên dịch hoặc chúng được xác định cục bộ. Các mã sau đây cũng có được là cảnh báo rằng biểu thức có thể được simplfied:

object TestFoo { 
    def bar(t: Option[Boolean]) = { 
    val f = Option(scala.util.Random.nextBoolean) 
    if (t.contains(true) && f.contains(false)) println("booop") 
    } 
    def main(args: Array[String]) = bar(t = Option(scala.util.Random.nextBoolean)) 
} 

Tôi chỉ không được làm thế nào tôi là nghĩa vụ phải làm cho rằng bất kỳ đơn giản hơn, là có một số lựa chọn kỳ lạ [Boolean] so sánh tôi bỏ lỡ?

+0

Tôi nghĩ rằng vì bạn đang tuyên bố những giá trị và chỉ sử dụng chúng ở đó, nó chờ đợi bạn trong-line những giá trị trong câu lệnh 'if' của bạn – hasumedic

+0

Không giống như nơi các biến được xác định hoặc nếu giá trị được biết tại các vấn đề thời gian biên dịch. Cập nhật với một ví dụ khác – klogd

+1

Điều gì sẽ xảy ra khi bạn sử dụng ký hiệu infix? ví dụ. '(t chứa true) && (f chứa false)' – hasumedic

Trả lời

2

Dường như bạn cho rằng bạn nhất quán với cách sử dụng cuộc gọi phương thức. Hoặc là tất cả mọi thứ ở dạng trung tố:

(t contains true) && (f contains false) 

Hoặc tất cả mọi thứ ở dạng gọi phương thức thông thường:

t.contains(true).&&(f.contains(false)) 
1

Với giá trị của bạn, t.contains(true).&&(f.contains(false)) luôn trả về true. Vì vậy, bạn có thể đơn giản hóa nó bằng cách chỉ cần viết true, tức là chỉ cần thực hiện print mà không có điều kiện if.

+0

Xin lỗi, mã thực tế không sử dụng các giá trị đã biết lúc biên dịch. Tôi đã thêm một ví dụ khác để làm rõ – klogd

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