programming ruby 阅读笔记之一:基础

本文深入探讨了Java中的类变量、静态方法及单例模式的使用,详细解释了类变量的概念、静态方法的特性,以及如何实现单例模式,通过实例代码演示了实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类变量:

类似于java中的static属性,所有类的实例访问相同的一个内存地址。类似c中的文件受控全局变量。

class Song
  @@plays=0 #类变量
...
...
end

静态方法:

类似java中的static方法。

class Example
  def instance_method
    
  end
  
  #方法名前带类名就是静态方法
  def Example.class_method
    
  end
end



单例(单根模式):

#!/usr/bin/env ruby

class MyLogger
  private_class_method :new

  @@logger = nil

  def MyLogger.create #这是个静态方法。
    @@logger = new unless @@logger
    @@logger
  end
end


如果定义方法时在最后一个参赛前加&,那么当调用该方法时,Ruby会寻找一个block。block将会被转化成Proc类的一个对象,并被赋值给参数。这样可以像任意其它变量一样处理该参数。

sonlist = SongList.new
class JukeboxButton < Button

  def initialize(label,&action)
    super(label)
    @action = action
  end

  def button_pressed
    @action.call(self)
  end

end

start_button = JukeboxButton.new("Start"){sonlist.start}
pause_button = JukeboxButton.new("Pause"){sonlist.pause}


判断是否带block:

def take_block(p1)
  if block_given? #这个方法判断是否带block
    yield(p1)
  else
    p1
  end
end

puts take_block("no block")
puts take_block("no block"){|s| s.sub(/no /,"")}


灵活的if 和 unless:

File.foreach("/etc/fstab") do |line|
  next if line =~/^#/
  puts(line) unless line=~/^$/  #打印非空行
end


load实现的动态加载:

5.times do |i|
  File.open("Temp.rb","w") do |f|
    f.puts "module Temp"
    f.puts "  def Temp.var"
    f.puts "    #{i}"
    f.puts "  end"
    f.puts "end"
  end
  load 'Temp.rb'
  puts Temp.var
end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值