嗨,我想通过一些配置文件动态地初始化 ruby 对象实例的属性,我可以使用以下代码快速完成:
class ApiTester
def initialize(path= "api_test")
h = eval(File.open("#{path}/config.hash","r").read)
h.each do |k,v|
eval("@#{k}=#{v.class == String ? "\"#{v}\"" : v }" )
end
end
end
Run Code Online (Sandbox Code Playgroud)
如何为属性“@#{k}”提供属性 attr_accessor?
给定一个类Klass和k这个类的实例:
class Klass
def hello
'Hello'
end
end
k = Klass.new
k.hello #=> "Hello"
Run Code Online (Sandbox Code Playgroud)
我可以extend使用模块将此实例添加到此特定实例,而无需更改整个类(即所有实例):
module Mod
def hello
"#{super}, World!"
end
end
k.extend(Mod)
k.hello #=> "Hello, World!"
Run Code Online (Sandbox Code Playgroud)
但是如果我k使用相同的模块多次扩展会发生什么?
k.extend(Mod)
k.extend(Mod)
k.extend(Mod)
k.hello #=> "Hello, World!"
Run Code Online (Sandbox Code Playgroud)
是后续调用被忽略还是对象被多次扩展?
换句话说:多次扩展对象是否"安全"?
我正在编写一个过滤程序,它读取包含地址数据的CSV文件,并排除位于新月(cres),avenue(ave)或place(pl)中的行.
这是一些示例输入:
data = <<CSV
ID,Street address,Town,Valuation date,Value
1,1 Northburn RD,WANAKA,1/1/2015,280000
2,1 Mount Ida PL,WANAKA,1/1/2015,280000
3,1 Mount Linton AVE,WANAKA,1/1/2015,780000
4,1 Centre CRES,WANAKA,1/1/2015,295000
CSV
require 'csv'
elements = []
CSV.parse(data, headers: true, header_converters: :symbol) do |row|
elements << row.to_h
end
elements
#=> [
# {:id=>"1", :street_address=>"1 Northburn RD", :town=>"WANAKA", :valuation_date=>"1/1/2015", :value=>"280000"},
# {:id=>"2", :street_address=>"1 Mount Ida PL", :town=>"WANAKA", :valuation_date=>"1/1/2015", :value=>"280000"},
# {:id=>"3", :street_address=>"1 Mount Linton AVE", :town=>"WANAKA", :valuation_date=>"1/1/2015", :value=>"780000"},
# {:id=>"4", :street_address=>"1 Centre CRES", :town=>"WANAKA", :valuation_date=>"1/1/2015", :value=>"295000"}
# ]
Run Code Online (Sandbox Code Playgroud)
我可以使用简单的正则表达式来过滤三个中的一个,即/pl/ …
我正在测试scan方法,试图更好地理解它.我在命令行中使用IRB来测试它,使用ruby文档中提供的示例:
a = "cruel world"
a.scan(/(.)(.)/) {|x,y| print y, x }
Run Code Online (Sandbox Code Playgroud)
应该返回:
rceu lowlr
Run Code Online (Sandbox Code Playgroud)
好吧,当我运行它时,它确实返回rceu lowlr=> "cruel world":
$ irb
irb(main):001:0> a = "cruel world"
=> "cruel world"
irb(main):002:0> a.scan(/(.)(.)/) {|x,y| print y, x }
rceu lowlr=> "cruel world"
irb(main):003:0>
Run Code Online (Sandbox Code Playgroud)
通常在使用IRB时,左侧=>是空白,右侧是返回值.在这种情况下,左侧是返回值...而右侧只是...如果拼写正确,返回值是多少?为什么?
说
string = "Johnny be good! And smile :-) "
Run Code Online (Sandbox Code Playgroud)
之间有区别吗
string.gsub(/\s+/, '')
Run Code Online (Sandbox Code Playgroud)
和
string.strip
Run Code Online (Sandbox Code Playgroud)
?
如果是的话,那是什么?
message_id = 'apple:grape:honey'
access_token = message_id.split(':')[1]
#=> "grape"
Run Code Online (Sandbox Code Playgroud)
我想回来 'grape:honey'
怎么做?请帮帮我
我有一个以字符串形式返回的日期:
date_str = "2018-08-17"
Run Code Online (Sandbox Code Playgroud)
我如何将其格式化为另一种标准日期格式,例如.17.8/2018以编程方式无需手动解析字符串?
我有一个像这样的数组
['project','AAA','Division','BBB','TestingType','CCC','Email','abc@gmail.com','def'@gmail.com','efg@gmail.com',...]
Run Code Online (Sandbox Code Playgroud)
电子邮件数量各不相同。并且可能还会有一些内容输入,例如,'project','AAA','Time','2323','Division','BBB','TestingType','CCC'现在您可能已经注意到,输入了Time和2323,所以结果哈希值也必须包含'Time'=>'2323'。但是无论如何,电子邮件将在最后。
我想将此数组转换为这样的哈希
resultHash = {
'project' => 'AAA',
'Division' => 'BBB',
'TestingType' => 'CCC',
'Email' => ['abc@gmail.com', 'def@gmail.com', 'efg@gmail.com']
}
Run Code Online (Sandbox Code Playgroud)
对我而言,这里的困难在于,电子邮件计数每次都不同。有人可以如上所述将这个数组转换为所需的哈希吗?
在Ruby中,调用有优势 present?
my_value.present?
Run Code Online (Sandbox Code Playgroud)
与 !!
!!my_value
Run Code Online (Sandbox Code Playgroud)