Float, :b => String} 这样我就可以将它用作针对另一个散列的“类型转换”过滤器。例如: def parse_hash(input_hash) -6ren">
gpt4 book ai didi

Ruby 动态 "typecasting"使用存储在变量中的类名

转载 作者:数据小太阳 更新时间:2023-10-29 08:17:28 26 4
gpt4 key购买 nike

我想像这样设置一个散列:

{:a => Float, :b => String}

这样我就可以将它用作针对另一个散列的“类型转换”过滤器。例如:

def parse_hash(input_hash)
output = { :a => Float, :b => String }
input_hash.each do |k,v|
input_hash[k] = output[k](v)
end
end

这个想法是,你可以这样做:

Float("123") #=> 123.0

但不幸的是,你不能这样做:

f = Float
f("123") #=> NoMethodError: undefined method `f' for main:Object

...这意味着我要使用的哈希解析方法不起作用。

那么,如果我在变量中有一个类的引用,是否有任何方法可以从那里自动将值强制转换为该类?

最佳答案

作为类的 Float 和作为方法的 Float 之间存在细微差别。 Ruby 解释器会在语法级别上进行区分,这取决于您如何使用它。 Float("1.0") 是方法的触发器,Float "1.0" 也是,但 a = Float 被解释为类.

需要具体捕获方法:

output = {
a: method(:Float),
b: method(:String)
}

然后,稍后调用它:

output[:a].call('1.7')
# => 1.7

关于Ruby 动态 "typecasting"使用存储在变量中的类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19054769/

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