Ruby 红宝石。符号'=';在中,设置程序名称和对象的初始化

Ruby 红宝石。符号'=';在中,设置程序名称和对象的初始化,ruby,object,setter,initializer,Ruby,Object,Setter,Initializer,在第一种情况下: class Item def name=(name_value) @name = name_value end def name @name end end 我一直在变老 item = Item.new item.name=("value") puts item.class 在第二种情况下: Item 我有 item = Item.new.name=("value") puts item.clas

在第一种情况下:

class Item

    def name=(name_value)   
        @name = name_value
    end

    def name
        @name
    end

end
我一直在变老

item = Item.new
item.name=("value")
puts item.class
在第二种情况下:

Item
我有

item = Item.new.name=("value")
puts item.class

为什么??我不理解其中的区别。

在第二种情况下,您正在创建一个新项目并设置名称,当您设置名称时,它将返回一个字符串,您将该字符串分配给项目变量。 你应该使用第一种形式

或从ActiveRecord继承时:

String

在第二种情况下,您正在创建一个新项并设置名称,当您设置名称时,它将返回一个字符串,您将该字符串分配给Item变量。 你应该使用第一种形式

或从ActiveRecord继承时:

String

Ruby认为您的第二个示例如下

item = Item.new(:name=>"value")
赋值运算符的返回值是被赋值的值
Item.new.name='value'
返回
'value'
,Item='value'也是如此

item = Item.new.name = 'value'

Ruby认为您的第二个示例如下

item = Item.new(:name=>"value")
赋值运算符的返回值是被赋值的值
Item.new.name='value'
返回
'value'
,Item='value'也是如此

item = Item.new.name = 'value'

在Ruby中,赋值表达式的计算结果是被赋值的值

即:

计算结果为
'bar'

那么,在你的情况下

foo = 'bar'
哪一个更习惯于这样写:

Item.new.name=("value")
分配的值是字符串
“value”

item = Item.new.name = 'value'
因此,
Item.new.name='value'
的计算结果为
'value'
(当然还有调用
name=
方法的副作用),这意味着

Item.new.name = 'value'
评估为

item = Item.new.name = 'value'

最后,
的值为
'value'
,这是一个
字符串
,,在Ruby中,赋值表达式的计算结果为被赋值的值

即:

计算结果为
'bar'

那么,在你的情况下

foo = 'bar'
哪一个更习惯于这样写:

Item.new.name=("value")
分配的值是字符串
“value”

item = Item.new.name = 'value'
因此,
Item.new.name='value'
的计算结果为
'value'
(当然还有调用
name=
方法的副作用),这意味着

Item.new.name = 'value'
评估为

item = Item.new.name = 'value'

最后,
的值为
'value'
,这是一个
字符串

我们的答案就像双胞胎:)我们的答案就像双胞胎:)