给定一个表,有没有办法检查它是否是任何类的实例对象?
假设所有类定义如下:
Class = {}
Class.__index = Class
function Class.new()
return setmetatable({}, Class) -- returns an instance
end
Run Code Online (Sandbox Code Playgroud) 在下面的代码中,我有一个绑定到哈希的类.在FETCH函数中,我打印JSON密钥的编码:
package Example::Tie;
use JSON;
my $json = JSON->new();
sub TIEHASH {
my ($pkg,@list) = @_;
bless { @list }, $pkg;
}
sub FETCH {
my ($tied,$key) = @_;
return $json->encode({key => $key});
}
package Example;
sub new {
my ($pkg,@list) = @_;
my $self = {};
tie %$self, 'Example::Tie', @list;
bless $self, $pkg;
}
package main;
my $exp = Example->new();
print($exp->{0} . "\n");
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
{"key":"0"}
Run Code Online (Sandbox Code Playgroud)
这导致0被编码为字符串.有没有办法将其编码为数字?
print($exp->{0} . "\n"); # this should print …Run Code Online (Sandbox Code Playgroud) 在以下示例中:
class Example(dict):
def __init__(self, name):
self.name = name
def get_name(self):
return self.name
ex = Example('ex')
if ex:
print(ex.get_name())
Run Code Online (Sandbox Code Playgroud)
该if ex声明正在评估False,我没有得到任何输出.导致此实例评估的原因是False什么?
如果我有一个类,有没有办法捕获密钥访问事件?
obj = Example.new
obj['key'] # is there any way to manually handle this?
Run Code Online (Sandbox Code Playgroud)
当我使用时method_missing,我只得到'[]'名称,但我没有得到'key'关键字.我也试图继承Hash,Example < Hash但obj['key']只是解决nil.
有没有办法检查对象是否是类的实例?如果一个对象是类的一个实例,它就是一个类的实例:
package Example;
sub new {
$self = {};
bless($self, shift);
return $self;
}
############
use Example;
$exp = Example->new(); # $exp is now an 'instance' of Example
# something like instanceof($exp, Example) would return 1
Run Code Online (Sandbox Code Playgroud)