Data = Struct.new(:lang_name, :number) ss = Data.new("Ruby", 3.5)
我希望number是Float类型,如果输入是String类型,尝试使用to_f将其转换为Float。
number
String
to_f
Float
4ioopgfo1#
C = Struct.new(:lang_name, :number) #=> C
C当然是一个有getter和setter的类:
C
C.class #=> Class C.instance_methods(false) #=> [:number, :lang_name, :lang_name=, :number=]
C也有一个initialize方法:
initialize
C.private_instance_methods(false) #=> [:initialize]
它继承自Struct:
Struct
C.superclass #=> Struct
Struct.private_instance_methods(false) #=> [:initialize, :initialize_copy]
该方法创建示例变量@lang_name和@number。因此,我们可以在C中定义一个方法initialize来调用关键字super,并将参数lang_name和number转换为浮点数。这将使用这些参数执行原始的initialize:
@lang_name
@number
lang_name
class C def initialize(lang_name, number) super(lang_name, number.to_f) end end #=> :initialize
让我们首先创建一个C的示例,给@number赋值一个float:
c1 = C.new("Ruby", 3.5) #=> #<struct C lang_name="Ruby", number=3.5>
我们可以从这个返回值中看到分配给示例变量的值,但要确认:
c1.lang_name #=> "Ruby" c1.number #=> 3.5
现在,让我们通过为@number分配一个字符串来创建C的第二个示例:
c2 = C.new("Ruby", "3.5") #<struct C lang_name="Ruby", number=3.5>
我们看到"3.5"已经按照需要转换为浮点3.5。确认:
"3.5"
3.5
c2.lang_name #=> "Ruby" c2.number #=> 3.5
请注意,这是一个关键字,我们依赖于方法Float#to_f以及String#to_f。
1条答案
按热度按时间4ioopgfo1#
C
当然是一个有getter和setter的类:C
也有一个initialize
方法:它继承自
Struct
:该方法创建示例变量
@lang_name
和@number
。因此,我们可以在C
中定义一个方法initialize
来调用关键字super,并将参数lang_name
和number
转换为浮点数。这将使用这些参数执行原始的initialize
:让我们首先创建一个
C
的示例,给@number
赋值一个float:我们可以从这个返回值中看到分配给示例变量的值,但要确认:
现在,让我们通过为
@number
分配一个字符串来创建C
的第二个示例:我们看到
"3.5"
已经按照需要转换为浮点3.5
。确认:请注意,这是一个关键字,我们依赖于方法Float#to_f以及String#to_f。