gpt4 book ai didi

ruby - 在 attr_accessor 期间键入转换值

转载 作者:太空宇宙 更新时间:2023-11-03 17:58:38 25 4
gpt4 key购买 nike

我是 Ruby 的新手,正在使用“Programming Ruby 1.9”(PickAxe) 学习它。在书中,我看到一个我修改过的程序:

 1 #!/usr/bin/env ruby -w
2
3 class BookInStock
4 attr_reader :isbn
5 attr_accessor :price
6 def initialize(isbn, price)
7 @isbn = isbn
8 @price = Float(price)
9 end
10 # def price=(price)
11 # @price = Float(price)
12 # end
13 end
14
15 b1 = BookInStock.new("isbn1", 3)
16 p b1
17 b2 = BookInStock.new("isbn2", 3.14)
18 p b2
19 b3 = BookInStock.new("isbn3", "5.67")
20 p b3
21 b3.price = "10.32"
22 p b3

第 8 行确保将正确的值分配给 b3.price

但是如何在不使用第 10-12 行中的方法的情况下处理第 21 行这样的情况?

有什么方法可以为此修改 attr_accessor 吗?还是我要求太多了:D

我在网上找不到任何此类引用资料。

最佳答案

attr_accessor :sym 是类的一种方法,它定义了简单的 getter 和 setter 方法。

您可以定义自己的casting_attr_accessor:

class Class

def casting_attr_accessor(accessor, type)

define_method(accessor) do
instance_variable_get("@#{accessor}")
end

define_method("#{accessor}=") do |val|
instance_variable_set("@#{accessor}", Kernel.send(type.to_s, val))
end
end
end

然后在你的类里面像这样使用它

casting_attr_accessor :price, Float

关于ruby - 在 attr_accessor 期间键入转换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8939834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com