当前位置: 首页 > news >正文

微网站的链接怎么做的长沙网站优化公司

微网站的链接怎么做的,长沙网站优化公司,惠阳东莞网站建设,常州市建设局网站我们经常选择一个方法,并且在同一个表达式里执行,比如常见的p.Distance()形式,实际上 将其分成两步来执行也是可能的。p.Distance叫作“选择器”,选择器会返回一个方法"值"->一 个将方法(Point.Distance)绑定到特定接…

        我们经常选择一个方法,并且在同一个表达式里执行,比如常见的p.Distance()形式,实际上 将其分成两步来执行也是可能的。p.Distance叫作“选择器”,选择器会返回一个方法"值"->一 个将方法(Point.Distance)绑定到特定接收器变量的函数。这个函数可以不通过指定其接收器 即可被调用;即调用时不需要指定接收器(译注:因为已经在前文中指定过了),只要传入函数 的参数即可:

p := Point{1, 2}
q := Point{4, 6}distanceFromP := p.Distance // method value
fmt.Println(distanceFromP(q)) // "5"
var origin Point // {0, 0}
fmt.Println(distanceFromP(origin)) // "2.23606797749979", sqrt(5)scaleP := p.ScaleBy // method value
scaleP(2) // p becomes (2, 4)
scaleP(3) // then (6, 12)
scaleP(10) // then (60, 120)

        在一个包的API需要一个函数值、且调用方希望操作的是某一个绑定了对象的方法的话,方 法"值"会非常实用(=_=真是绕)。举例来说,下面例子中的time.AfterFunc这个函数的功能是在 指定的延迟时间之后来执行另一个函数。且这个函数操作的是一个Rocket对象r:

type Rocket struct { /* ... */ }
func (r *Rocket) Launch() { /* ... */ }
r := new(Rocket)
time.AfterFunc(10 * time.Second, func() { r.Launch() })

        直接用方法"值"传入AfterFunc的话可以更为简短:

time.AfterFunc(10 * time.Second, r.Launch) //直接省略掉了上面那个例子里的匿名函数

        和方法"值"相关的还有方法表达式。当调用一个方法时,与调用一个普通的函数相比,我们必 须要用选择器(p.Distance)语法来指定方法的接收器。 当T是一个类型时,方法表达式可能会写作T.f或者(*T).f,会返回一个函数"值",这种函数会将 其第一个参数用作接收器,所以可以用通常(译注:不写选择器)的方式来对其进行调用:

p := Point{1, 2}
q := Point{4, 6}distance := Point.Distance // method expression
fmt.Println(distance(p, q)) // "5"
fmt.Printf("%T\n", distance) // "func(Point, Point) float64"scale := (*Point).ScaleBy
scale(&p, 2)
fmt.Println(p) // "{2 4}"
fmt.Printf("%T\n", scale) // "func(*Point, float64)"
// 译注:这个Distance实际上是指定了Point对象为接收器的一个方法func (p Point) Distance(),
// 但通过Point.Distance得到的函数需要比实际的Distance方法多一个参数,
// 即其需要用第一个额外参数指定接收器,后面排列Distance方法的参数。
// 看起来本书中函数和方法的区别是指有没有接收器,而不像其他语言那样是指有没有返回值。

        当你根据一个变量来决定调用同一个类型的哪个函数时,方法表达式就显得很有用了。你可 以根据选择来调用接收器各不相同的方法。下面的例子,变量op代表Point类型的addition或者 subtraction方法,Path.TranslateBy方法会为其Path数组中的每一个Point来调用对应的方法:

type Point struct{ X, Y float64 }func (p Point) Add(q Point) Point { return Point{p.X + q.X, p.Y + q.Y} }
func (p Point) Sub(q Point) Point { return Point{p.X - q.X, p.Y - q.Y} }type Path []Pointfunc (path Path) TranslateBy(offset Point, add bool) {var op func(p, q Point) Pointif add {op = Point.Add} else {op = Point.Sub}for i := range path {// Call either path[i].Add(offset) or path[i].Sub(offset).path[i] = op(path[i], offset)}
}

http://www.khdw.cn/news/21245.html

相关文章:

  • 网站开发的难点学电脑培训班
  • 网站开发不足之处宣传链接怎么做
  • 提供微网站制作电话衡水网站seo
  • 做网站 毕业设计常用的seo工具
  • 买了个域名 如何自己做网站seo网站排名优化公司哪家好
  • 手机版网站建设nba最快的绝杀
  • 做黄色网站被抓了怎么处理十个有创意的线上活动
  • 企业网站seo优化方案百度新闻网
  • 佛山网站建设no.1定制网站建设
  • 宿迁定制网站建设百度提交网站入口网址
  • 有哪些在线做图的网站百度推广工资多少钱一个月
  • 网站如何做ICP备案百度官网认证多少钱一年
  • 北京营销型网站建设网站策划是干什么的
  • 广州企业信息查询系统快速seo整站优化排行
  • 做网站不买服务器百度能搜到88个seo网站优化基础知识点
  • 网站开发技术项目代码搜索网站查询ip
  • 时空网站建设的可行性分析一诺网络推广公司
  • 鹰潭北京网站建设semicircle
  • 自己制作电视直播app网站seo策划方案案例分析
  • 网站免费做软件整站多关键词优化
  • javacms做动漫网站运营推广的方式和渠道有哪些
  • 做网站按什么收费免费个人网站模板
  • php构建网站自媒体怎么赚钱
  • 宁波建站公司哪家服务好优化seo教程技术
  • 网站怎样做https杭州百度百家号seo优化排名
  • 女装商城网站建设b2b平台有哪些平台
  • 做网站不给提供ftp网站自然优化
  • 新手网站软文广告经典案例300
  • 住房与住房建设部网站成都关键词自然排名
  • 公司备案网站被注销吗在线seo诊断