2015-03-30 33 views
1

在我來說,我希望有一個標誌,我的計劃是這樣的,以控制其操作人員應通過函數使用:如何將「_> _」存儲在Scala中的val中?

val includeValue = *some value* 

val include = _ => _ 
val exclude = _ > _ 

val operation = if (includeValue) include else exclude 

這是可能的???

+2

不工作?什麼是錯誤? – Bergi 2015-03-30 21:47:33

回答

2

總之,您不能以任何合理的方式將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這個特徵,但是使用這個符號會變得相當混亂。

3

你可以使用這樣的事情,如果你要定義爲所有類型的轉化爲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) 
相關問題