作为以前只有很少接触编程的人,这主要是在Python和C ++中,我发现Ruby是一种非常令人耳目一新的语言,但是我在理解Ruby使用类构造函数和虚拟访问器方面遇到了一些麻烦。 ,特别是什么是什么和什么不被认为是构造函数,以及我是否正确理解虚拟访问器。
这是一个例子(归功于Pragmatic Bookshelf,Programming Ruby 1.9& 2.0):
class BookInStock
attr_accessor :isbn, :price # is this part of the class constructor?
def initialize(isbn, price) # and is the initialize method part of a constructor or just a regular method?
@isbn = isbn
@price = price
end
def price_in_cents
Integer(price*100+0.5)
end
def price_in_cents=(cents) # this is a 'virtual accessor' method, trough which I am able to update the price down the road...?
@price = cents / 100.0
end
end
book = BookInStock.new('isbn1', 23.50)
puts "Price: #{book.price}"
puts "Price in cents: #{book.price_in_cents}"
book.price_in_cents = 1234 # here I am updating the value thanks to the 'virtual accessor' declared earlier, as I understand it
puts "New price: #{book.price}"
puts "New price in cents: #{book.price_in_cents}"
感谢所有帮助,我可以理解这段代码。
答案 0 :(得分:0)
1 attr_accessor:isbn,:price#是类构造函数的一部分吗?
这一行是通过仅方法哲学来保持访问私有成员的概念。它实际上相当于声明两个私有成员及其getter和setter方法,与构造函数无关。
2 def初始化(isbn,price)#并且是构造函数的初始化方法部分还是常规方法?
为了简单起见,这是构造函数。该方法被称为“新”关键字
3 def price_in_cents =(美分)#这是一个'虚拟访问者'方法,我可以在路上更新价格......?
它只是price = method的替代方法,它以不同的格式获取参数,price =方法是由问题第1行自动生成的setter方法。
4 book.price_in_cents = 1234#here我正在更新值,这要归功于之前声明的'虚拟访问者',正如我所理解的那样
请记住,这与分配变量有关,但实际上是访问setter方法,与问题第1行和第3行中反映的概念一致。