新手问题 在实例方法中指定默认值的不解

maucat · 2015年11月28日 · 最后由 mizuhashi 回复于 2015年11月29日 · 1780 次阅读

环境:Ruby 2.0.0

class HelloWorld
    def initialize(myname = "Ruby")
        @name = myname 
    end

    def hello
        puts "Hello, world. I am #{@name}."
    end

    def name=(ddsa = "testname")
        puts ddsa
        @name = ddsa
    end

end
ruby = HelloWorld.new
ruby.hello
ruby.name=()
ruby.hello

输出的结果是

Hello, world. I am Ruby.
#空行
Hello, world. I am .

以我的理解来看,应该是输出

Hello, world. I am Ruby.
testname
Hello, world. I am testname.

我知道定义访问实例变量可以用attr_accessor :name 刚初学 ruby,希望各位能帮忙解释下,谢。

irb(main):001:0> data = ()
=> nil
irb(main):002:0> data
=> nil

x.name = xxx 不是方法调用,是赋值 这种赋值至少有两个特性 1.只接受一个参数(必取得一个参数) 2.必定返回取得的参数

带=号的都是赋值,"调用"那个“同名”的方法只是一种捷径

ruby.send(:name=) 这样才会真正走正式流程调用你的那个方法,显示 testname

https://ruby-china.org/topics/24631 https://ruby-china.org/topics/26940

需要 登录 后方可回复, 如果你还没有账号请 注册新账号