在我來說,我希望有一個標誌,我的計劃是這樣的,以控制其操作人員應通過函數使用:如何將「_> _」存儲在Scala中的val中?
val includeValue = *some value*
val include = _ => _
val exclude = _ > _
val operation = if (includeValue) include else exclude
這是可能的???
在我來說,我希望有一個標誌,我的計劃是這樣的,以控制其操作人員應通過函數使用:如何將「_> _」存儲在Scala中的val中?
val includeValue = *some value*
val include = _ => _
val exclude = _ > _
val operation = if (includeValue) include else exclude
這是可能的???
總之,您不能以任何合理的方式將val _ > _
存儲在泛型中。
_ > _
表示接受兩個參數的函數。它在第一個參數上調用>
方法,並將第二個參數作爲參數傳遞給它。我們不能簡單地在這裏使用通配符類型,因爲不是每種類型都有一個>
方法。像這樣從未知到未知的功能也沒有任何意義。
我們可以嘗試一些簡單的東西,比如讓它們變成Int => Int
。
val includeValue = false
val include: (Int, Int) => Boolean = _ >= _
val exclude: (Int, Int) => Boolean = _ > _
val operation = if (includeValue) include else exclude
scala> operation(2, 2)
res72: Boolean = false
// with includeValue = true
scala> operation(2, 2)
res73: Boolean = true
但是,在此實施中,您僅限於使用Int
。也許這對你很好。如果不是,那麼你可能會想使用Numeric
這個特徵,但是使用這個符號會變得相當混亂。
你可以使用這樣的事情,如果你要定義爲所有類型的轉化爲Comparable
操作:
def exclude[T <% Ordered[T]](a: T, b: T) = a > b
def include[T <% Ordered[T]](a: T, b: T) = a >= b
def operation[T <% Ordered[T]](a: T, b: T) = if (includeValue) include(a, b) else exclude(a, b)
不工作?什麼是錯誤? – Bergi 2015-03-30 21:47:33