如何创建可能包含Int或String的类型

2024-09-26 22:54:45 发布

您现在位置:Python中文网/ 问答频道 /正文

如果有一个函数f(x),x的类型可以是Int或String, 如果它是Int,那么这个f将返回x+1 如果它是字符串,那么f将反转x并返回它。你知道吗

这在动态类型语言(如python和javascript)中很容易实现 只使用isinstance(x, Int)。你知道吗

我们可以知道它的类型,如果不是这样的话, 但是在像kotlin这样的静态类型语言中,我不知道怎么做? 因为我不知道如何使x的类型可以是Int或String。你知道吗

定义f(x):

 if isinstance(x, int):
     return x+1
 if isinstance(x, str):

     return x[::-1]

在haskell中,我们有模式匹配来实现这一点

f::任意一个Int字符串->;任意一个Int字符串

f(左x)=左(x+1)

f(右x)=右(反x)

在科特林呢?你知道吗


Tags: 函数字符串语言类型stringreturnif定义
3条回答

你可以这样做:

fun getValue(id: Int): Any { ... } 

fun process(value: Int) { ... } 
fun process(value: String) { ... }
val value = getValue(valueId)
 when (value) { 
is Int -> process(value)
is String -> process(value)
else -> ... }

这样,您就可以使用方法重载来基于params为您完成工作。你知道吗

密封等级E

数据类L(val v:String):E()

数据类R(val v:Int):E()

有趣的多边形(expr:E):E=when(expr){

is L -> L(expr.v)

is R -> R(expr.v + 1)

}

println(poly(poly(R(3)))

println(poly(L(“aha”))

有吗?=当(expr){

is L -> expr.v

is R -> expr.v + 1

}

在kotlin中,Arrow为语言提供了很多功能。它们之间有^{}。 您可以定义:

fun f(x: Either<Int, String>): Either<Int, String> =
    x.bimap({ it+1 }, { it.reversed() })

相关问题 更多 >

    热门问题