簡體   English   中英

引用vararg函數參數Kotlin

[英]Referring to vararg function parameters Kotlin

有沒有辦法參考

permission.permissionName

在此代碼中:

fun Activity.isPermissionGranted(vararg permission : AppPermission) = (PermissionChecker.checkSelfPermission(this, permission.permissionName) == PackageManager.PERMISSION_GRANTED)

照原樣,我收到“無法解析的引用:permissionName”錯誤。

AppPermission類簽名如下所示:

sealed class AppPermission(val permissionName: String,
                           val requestCode: Int,
                           val deniedMessageId: Int,
                           val explanationMessageId: Int) {...}

老實說,我什至不確定在這里使用varargs是否是個好主意,因此,如果它完全是傻瓜,請糾正我。

基本上,我試圖為Android> 5.0實現授予權限邏輯,但我不確定最終將需要多少權限,因此這就是為什么我在這里考慮使用varargs的原因。

vararg基本上只是用於創建數組的語法糖。 因此,您將需要像Array<AppPermission>一樣對待參數permission ,這意味着您可能需要這樣做:

fun Activity.isPermissionGranted(vararg permissions : AppPermission) = permissions.all { permission -> (PermissionChecker.checkSelfPermission(this, permission.permissionName) == PackageManager.PERMISSION_GRANTED) }

在這里, all距離,計算一個標准庫函數Boolean為陣列中的每個值,並返回true如果所有這些Boolean s為true

kotlin 參考 function 帶可變參數並轉換數組<out to list<out< div><div id="text_translate"><p> 我已經根據這個主題<a href="https://stackoverflow.com/questions/62260177/kotlin-geneirc-with-vararg-parameter" rel="nofollow noreferrer">基本問題提出了問題</a></p><p>所以,我想提前問一下。 有人用數組和列表回答了這個問題</p><pre>Class Test&lt;T,V&gt;{ var functionPara:(()-&gt;T)? = null var recallFunctionWithFunction:( (Array&lt;out T&gt;) -&gt; V)? = null constructor(value: ()-&gt;T, recallFunctionWithFunction: (Array&lt;out T&gt;) -&gt; V ){ this.functionPara = value this.recallFunctionWithFunction = recallFunctionWithFunction } inline fun &lt;reified T, V&gt; compose(crossinline f: (Array&lt;out T&gt;) -&gt; V, vararg g: () -&gt; T): () -&gt; V { val results = g.map { it() } return { f(results.toTypedArray()) } } fun &lt;T, V&gt; compose(f: (List&lt;out T&gt;) -&gt; V, vararg g: () -&gt; T): () -&gt; V { val results = g.map { it() } return { f(results) } } } fun runCompose(){ compose(functionPara,recallFunctionWithFunction).invoke() }</pre><p> 但我發現,當我引用帶有 vararg 參數的 function 時</p><pre>fun functionA(vararg:Observable&lt;Any&gt;):LiveData&lt;Boolean&gt;{ } fun functionB():Observable&lt;Any&gt;{ }</pre><p> 當我執行類似::functionA 的操作時,A 的類型將是Array&lt;out Observable&lt;Any&gt;&gt;-&gt;LiveData&lt;Boolean&gt;因此,當我執行類似操作時</p><p>Test&lt;Observable&lt;Any&gt;,LiveData&lt;Boolean&gt;&gt;(::functionB,::functionA).runCompose()</p><p> <strong><em>情況 1</em></strong>如果我使用 compose function 並接受 List 類型,它將顯示類型不匹配,因為引用::functionA 將返回 Array</p><p><img src="https://i.stack.imgur.com/X3k3A.png" alt="圖片1"></p><p> <strong><em>情況 2</em></strong>如果我使用 compose function 並接受 Array 類型,它將顯示錯誤</p><p>不能使用“T”作為具體類型參數。 改用 class</p><p><img src="https://i.stack.imgur.com/Z2iwJ.png" alt="圖片2"></p><p> 在上一篇文章中,有人回答我將數組轉換為列表。 但是如何將引用 function 與 vararg 參數與原始Array&lt;out to List &lt;out ? 當我引用 function 之類的 function 時,類型必須是Array&lt;out但我想將其插入到 compose function 中。 我必須轉換它。 任何人都可以幫忙嗎? 我在那兒呆了很長時間。 希望有人能救我!!</p></div></out>

[英]kotlin reference function with vararg parameter and convert Array<out to List<out

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 將vararg參數傳遞給Kotlin中的另一個函數時編譯時間錯誤 kotlin 參考 function 帶可變參數並轉換數組<out to list<out< div><div id="text_translate"><p> 我已經根據這個主題<a href="https://stackoverflow.com/questions/62260177/kotlin-geneirc-with-vararg-parameter" rel="nofollow noreferrer">基本問題提出了問題</a></p><p>所以,我想提前問一下。 有人用數組和列表回答了這個問題</p><pre>Class Test&lt;T,V&gt;{ var functionPara:(()-&gt;T)? = null var recallFunctionWithFunction:( (Array&lt;out T&gt;) -&gt; V)? = null constructor(value: ()-&gt;T, recallFunctionWithFunction: (Array&lt;out T&gt;) -&gt; V ){ this.functionPara = value this.recallFunctionWithFunction = recallFunctionWithFunction } inline fun &lt;reified T, V&gt; compose(crossinline f: (Array&lt;out T&gt;) -&gt; V, vararg g: () -&gt; T): () -&gt; V { val results = g.map { it() } return { f(results.toTypedArray()) } } fun &lt;T, V&gt; compose(f: (List&lt;out T&gt;) -&gt; V, vararg g: () -&gt; T): () -&gt; V { val results = g.map { it() } return { f(results) } } } fun runCompose(){ compose(functionPara,recallFunctionWithFunction).invoke() }</pre><p> 但我發現,當我引用帶有 vararg 參數的 function 時</p><pre>fun functionA(vararg:Observable&lt;Any&gt;):LiveData&lt;Boolean&gt;{ } fun functionB():Observable&lt;Any&gt;{ }</pre><p> 當我執行類似::functionA 的操作時,A 的類型將是Array&lt;out Observable&lt;Any&gt;&gt;-&gt;LiveData&lt;Boolean&gt;因此,當我執行類似操作時</p><p>Test&lt;Observable&lt;Any&gt;,LiveData&lt;Boolean&gt;&gt;(::functionB,::functionA).runCompose()</p><p> <strong><em>情況 1</em></strong>如果我使用 compose function 並接受 List 類型,它將顯示類型不匹配,因為引用::functionA 將返回 Array</p><p><img src="https://i.stack.imgur.com/X3k3A.png" alt="圖片1"></p><p> <strong><em>情況 2</em></strong>如果我使用 compose function 並接受 Array 類型,它將顯示錯誤</p><p>不能使用“T”作為具體類型參數。 改用 class</p><p><img src="https://i.stack.imgur.com/Z2iwJ.png" alt="圖片2"></p><p> 在上一篇文章中,有人回答我將數組轉換為列表。 但是如何將引用 function 與 vararg 參數與原始Array&lt;out to List &lt;out ? 當我引用 function 之類的 function 時,類型必須是Array&lt;out但我想將其插入到 compose function 中。 我必須轉換它。 任何人都可以幫忙嗎? 我在那兒呆了很長時間。 希望有人能救我!!</p></div></out> kotlin 中的字符串格式和可變參數 kotlin 中的 vararg 沒用嗎? kotlin function 只有 7 個參數 函數調用中的參數? [科特林] 禁止使用多個vararg參數 Kotlin-vararg-&gt;更改查詢參數值 在 Kotlin - Android 中未調用帶參數的 Function Kotlin動態參數在函數中的數量?
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM