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

maucat · November 28, 2015 · Last by mizuhashi replied at November 29, 2015 · 1773 hits

环境: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

You need to Sign in before reply, if you don't have an account, please Sign up first.