首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >它是一种类型转换器的int?

它是一种类型转换器的int?
EN

Stack Overflow用户
提问于 2014-07-24 05:43:41
回答 2查看 186关注 0票数 0

我有一本书中的代码示例:

前进之路: Go编程语言的全面介绍

我不知道什么东西是怎么工作的。看看代码:

代码语言:javascript
运行
复制
package main

import (
    "fmt"
)

type Any interface{}
type EvalFunc func(Any) (Any, Any)

func main() {
    evenFunc := func(state Any) (Any, Any) {
        os := state.(int)
        ns := os + 2
        return os, ns
    }
    even := BuildLazyIntEvaluator(evenFunc, 0)

    for i := 0; i < 10; i++ {
        fmt.Printf("%vth even: %v\n", i, even())
    }
}

func BuildLazyEvaluator(evalFunc EvalFunc, initState Any) func() Any {
    retValChan := make(chan Any)
    loopFunc := func() {
        var actState Any = initState
        var retVal Any
        for {
            retVal, actState = evalFunc(actState)
            retValChan <- retVal
        }
    }
    retFunc := func() Any {
        return <-retValChan
    }
    go loopFunc()
    return retFunc
}

func BuildLazyIntEvaluator(evalFunc EvalFunc, initState Any) func() int {
    ef := BuildLazyEvaluator(evalFunc, initState)
    return func() int {
        return ef().(int)
    }
}

请看代码行:

代码语言:javascript
运行
复制
return ef().(int)

这里发生了什么事?编译器是否将结果转换为int类型?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-24 05:52:58

代码语言:javascript
运行
复制
x := ef()     // x is of type Any, which is actually an interface{}
y := x.(int)  // this is a type assertion, if the contents of x are an interface, y will be assigned x's int value, otherwise the runtime will panic.
票数 6
EN

Stack Overflow用户

发布于 2014-07-24 14:18:23

这是一个类型断言--参见围棋特快

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24925949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档