为何无法通过File实例调用类方法::basename?
为什么无法通过File实例调用类方法::basename?
嘿,这个问题本质是搞混了Ruby里类方法和实例方法的调用规则啦!
首先得明确:File::basename是File类的类方法——这类方法是绑定在整个File类上的,而不是绑定在某个具体的File实例对象(比如你创建的x)上的。你用x::basename试图通过实例去调用类方法,这不符合Ruby的方法调用逻辑,自然会报错。
正确的调用方式有两种:
- 直接通过
File类本身调用类方法:
File.basename("name_of_file.ext")
- 如果已经有了
File实例x,可以通过实例的class属性拿到它所属的类,再调用类方法:
x = File.new("name_of_file.ext") x.class.basename("name_of_file.ext")
额外小技巧:
如果你想获取实例x自身的文件名,其实不用重复传路径,Ruby的File实例自带同名的实例方法basename,直接调用就行:
x = File.new("name_of_file.ext") x.basename # 返回 "name_of_file.ext" # 还可以传后缀参数来去掉扩展名 x.basename(".ext") # 返回 "name_of_file"
内容的提问来源于stack exchange,提问作者tkk
相关产品推荐
相关产品推荐

