查看: //为值 Binary 定义方法“Get() uint64” func (i Binary) Get() uint64 { 返回 uint64(i)
我们定义了一个方法 Get() 显然 b := Binary(200) 执行它, 但是它们之间的联系在哪里。我没有找到 Get() 的定义位置,我假设这个定义覆盖了一个内部定义,或者我错了。
package main
import (
"fmt"
"strconv"
)
// This defines a interface with one method: "String() string"
type Stringer interface {
String() string
}
// Defines an unsigned 64 bit number
type Binary uint64
// Defines a method "String() string" for value Binary
func (i Binary) String() string {
return strconv.FormatUint(i.Get(), 2)
}
// Defines a method "Get() uint64" for value Binary
func (i Binary) Get() uint64 {
return uint64(i)
}
// Main program
func main() {
b := Binary(200) // Create Unsigned value of 200
s := Stringer(b) // Calls interface "Stringer" on "b"
fmt.Println(s.String()) // "s" is an Stringer Interface Type
}
最佳答案
实际上,您已经为 uint64 创建了一个别名,因此当您转换数字 200 时,它的原始值仍然是一个 uint64,但是您的自定义 Binary 类型允许您使用可以在自定义类型上定义的方法来修饰它.
当你转换时,Get() 方法没有被调用,你只是告诉 Go 运行时把它当作一个 Binary 类型而不是一个基本的 uint64。事实上,Get() 方法实际上是多余的,因为您可以将它当作 uint64 来传递,而您没有 String() 方法来满足 stringer 接口(interface),如果您这样做,原始值将被打印出来fmt.Println(b)
fmt.Println(200) //prints 200
fmt.Println(Binary(200)) // also prints 200
正如 JimB 所说,定义的 String 方法不会发生这种情况。
为了进一步澄清,String() 方法正在使用 Get 方法,此类型需要此方法来满足 Stringer 接口(interface)要求。当您使用利用 Stringer 的函数或方法时,这是调用 String() 和 Get() 的地方。如果这仍然是错误的,请尽快在评论中告诉我
关于go - 谁在为类型转换定义 Get() 方法? golang 本身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37286062/
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我正在尝试设置一个puppet节点,但rubygems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由rubygems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby
当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/
我想了解Ruby方法methods()是如何工作的。我尝试使用“ruby方法”在Google上搜索,但这不是我需要的。我也看过ruby-doc.org,但我没有找到这种方法。你能详细解释一下它是如何工作的或者给我一个链接吗?更新我用methods()方法做了实验,得到了这样的结果:'labrat'代码classFirstdeffirst_instance_mymethodenddefself.first_class_mymethodendendclassSecond使用类#returnsavailablemethodslistforclassandancestorsputsSeco
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
设置:狂欢ruby1.9.2高线(1.6.13)描述:我已经相当习惯在其他一些项目中使用highline,但已经有几个月没有使用它了。现在,在Ruby1.9.2上全新安装时,它似乎不允许在同一行回答提示。所以以前我会看到类似的东西:require"highline/import"ask"Whatisyourfavoritecolor?"并得到:Whatisyourfavoritecolor?|现在我看到类似的东西:Whatisyourfavoritecolor?|竖线(|)符号是我的终端光标。知道为什么会发生这种变化吗? 最佳答案
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby1.9+ 关于ruby-主要:Objectwhenrun