genannt wurde habe ich eine Methode foo
und es wird in einem Skript script001.rb
genannt, wie soll ich das foo
Methode schreiben, so dass es den Dateinamen eines Skripts zurückgibt, die es genannt?Erste Dateinamen in Ruby, wo Methode
5
A
Antwort
5
können Sie Kernel#caller
verwenden, die den aktuellen Ausführungsstapel zurückgibt - ein Array Strings in der Form enthalten file:line
oder file:line: in 'method'
:
def foo
caller[0][/[^:]+/] # OR caller[0].split(':')[0]
end
4
@ falsetru Antwort ist richtig, aber ich dachte, dass ich dieses Stück Code hinzufügen würde um die verschiedenen Ergebnisse der vorgeschlagenen Methoden zu demonstrieren.
Zwei Dateien.
hosting.rb
class Hosting
def self.foo
puts "__FILE__: #{__FILE__}"
puts "__method__: #{__method__}"
puts "caller: #{caller}"
puts "caller_locations.first.path: #{caller_locations.first.path}"
end
end
calling.rb
require_relative 'hosting'
Hosting.foo
On:ruby calling.rb
die Ausgabe ist:
__FILE__: /path/to/hosting.rb
__method__: foo
caller: ["calling.rb:2:in `<main>'"]
caller_locations.first.path: calling.rb
7
Um zu vermeiden, dass Sie mit caller
Style-Strings arbeiten müssen, können Sie stattdessen Kernel#caller_locations
verwenden. Es gibt Ihnen ein Array von Thread::Backtrace::Location
Objekte, die einige bequeme Methoden für Sie zur Verfügung hat.
die Dateinamen zu erhalten, in Ihrem Fall, können Sie die #path
Methode verwenden:
def foo
caller_locations.first.path
end
Verwandte Themen
- 1. regexs in Ruby Dateinamen bekommen
- 2. rekursive Methode in Ruby
- 3. Unicode-Dateinamen unter Windows in Ruby
- 4. erste schritte mit ruby-vips
- 5. wo Methode in Klassendiagramm
- 6. Try Methode in Ruby
- 7. Wie finde ich heraus, wo eine Ruby-Methode deklariert wird?
- 8. Ruby-CSV falsch erste Zeichen
- 9. Erste Schritte: Ruby, Rails, UUIDs
- 10. Extrahieren von Dateinamen aus Befehlszeilenargumente mit Ruby
- 11. Schreiben Sie den Dateinamen in die erste Zeile des Textes
- 12. Return erste Übereinstimmung von Ruby Regex
- 13. Eine Methode in Ruby verzieren
- 14. Patch-Methode in Ruby Sinatra
- 15. Wie man eine Ruby-Methode in einen Block umwandelt?
- 16. Warnungen in Ruby deaktivieren - wo zu platzieren
- 17. Wo ist die "Gemfile" in Ruby?
- 18. Wie definiert man unbenannte Methode in Ruby?
- 19. Wo setzen „ViewPager.setCurrentItem()“ Methode
- 20. Rekursive Verzeichnisliste mit Ruby mit chinesischen Zeichen in Dateinamen
- 21. Ruby - Schreiben von Dateinamen aus Unterordnern in eine TXT-Datei
- 22. Ruby-Methode Interception
- 23. Ruby: undefined Methode `> '
- 24. RoR Erste Schritte: Rake db: Migrieren undefinierte Methode 'Referenz'
- 25. Laravel 5.2: Erste Formularfelder in Controller-Methode
- 26. erste Zeile fgetcsv Methode in PHP überspringen
- 27. Erste Nullpointer in Methode initialize-Controller JavaFX
- 28. Undefinierte Methode jeder Ruby
- 29. rekursive DFS Ruby-Methode
- 30. Ruby-System Methode Argumente
Es gibt auch eine 'absolute_path' Methode' Thema :: Backtrace :: Location', wenn Sie den vollständigen Pfad wollen zu der Datei. – ReggieB