Ruby 这是怎么回事?

zlfera · 2013年06月16日 · 最后由 jjym 回复于 2013年06月16日 · 3050 次阅读

class A def m=(value) @m=value 10 end end a=A.new a.m=7 这个方法怎么返回的是 7 而不是 10 呢,ruby 不是总是返回最后一个值吗?求解释!

??最后两行是什么意思

@ChanceDoor实例化一个对象,然后调用方法

匿名 #3 2013年06月16日

你的怎个方法就是赋值。赋值当然是返回你的值了。

我也觉得奇怪

这是赋值方法 在以前 Ruby 版本与现在新的对比 返回的值是有区别的 可参考 http://www.cnblogs.com/timsheng/archive/2013/03/25/2981195.html

6 楼 已删除

这确实是 ruby 变态的地方:

class A
  def val=(v)
  end

  def val
  end
end

a = A.new 
a.val = 100
# => 100
a.val 
# => nil

更变态的来了:

class A
  def val=(v)
    @member = v.upcase
  end

  def val
    @member
  end 
end

a = A.new
a.val = 'hello'
# => 'hello'
a.val
# => 'HELLO'

这个跟平常思维不一致!
你们可能会说,val 只是个方法,方法可以返回任何东西。 但我还是觉得这跟玩似的!

[代入各种语言] 最变态的地方,就是你可以写

True = false;

这个跟平常思维不一致 !

#8 楼 @luikore Prolog 系列才不变态呢

楼主为什么不排版??

答案: 带 = 的方法,返回的就是参数的值。

确实是个坑啊,有违 Ruby 的 least surprise 原则

#11 楼 @blacktulip 不违反吧,像下面这样赋值的话 a.foo = b.bar = 1024

#12 楼 @IchiNiNiIchi 应该就是为了这个。。

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