Ho un metodo foo
e si chiama in uno script script001.rb
come devo scrivere il metodo foo
in modo che restituisca il nome del file di uno script che lo ha chiamato?Ottenere il nome del file in Ruby in cui il metodo è stato chiamato
5
A
risposta
5
È possibile utilizzare Kernel#caller
che restituisce l'esecuzione corrente stack - una matrice contenente le stringhe in forma file:line
o file:line: in 'method'
:
def foo
caller[0][/[^:]+/] # OR caller[0].split(':')[0]
end
4
@ risposta di falsetru è corretta, ma ho pensato che vorrei aggiungere questo pezzo di codice per dimostrare i diversi risultati dei metodi proposti.
Due file.
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
dell'output sono:
__FILE__: /path/to/hosting.rb
__method__: foo
caller: ["calling.rb:2:in `<main>'"]
caller_locations.first.path: calling.rb
7
Per evitare di dover gestire stringhe di stile caller
, è possibile utilizzare invece Kernel#caller_locations
. Ti restituisce una serie di oggetti Thread::Backtrace::Location
, che ha alcuni metodi convenienti disponibili per te.
Per ottenere il nome del file, nel tuo caso, è possibile utilizzare il metodo #path
:
def foo
caller_locations.first.path
end
Problemi correlati
- 1. Ottieni la classe in cui è stato definito il metodo?
- 2. come ottenere il nome file del chiamante, il nome del metodo in python
- 3. Perché il metodo java.lang.Thread.join() è stato chiamato così?
- 4. Python: come ottenere il nome del metodo del chiamante nel metodo chiamato?
- 5. Come ottenere il nome del metodo corrente in Delphi 7?
- 6. Come posso ottenere il nome del metodo di prova che è stato eseguito in un metodo di rimozione del test?
- 7. Come posso registrare ogni metodo chiamato in un programma Ruby?
- 8. Test se il metodo in ClassA è stato chiamato da un altro metodo in Classe A
- 9. Ottenere il nome del file bitmap
- 10. TCL ottenere il nome proc in cui sono
- 11. Come ottenere il nome del file di input in MRjob
- 12. E 'possibile in Ruby definire un metodo il cui nome termina con: (due punti)?
- 13. Come ottenere il nome, o il file e la linea del metodo del chiamante?
- 14. Qual è il simbolo del metodo per + = in ruby?
- 15. Errore Il dominio dell'applicazione in cui è stato eseguito il thread è stato scaricato.
- 16. PHP, ottenere il nome del file senza estensione di file
- 17. C'è un modo per ottenere il nome con cui è stato istanziato un modulo Verilog?
- 18. Come posso ottenere la posizione in cui è stato chiamato l'errore?
- 19. Ottenere il nome del prodotto dal file msi in C#
- 20. Come ottenere il nome del metodo dall'interno di quel metodo senza utilizzare il reflection in C#
- 21. Come ottenere il nome della cartella, in cui si trova il file specificato, da pathlib.path?
- 22. esegue il metodo (magico) quando il metodo esistente è chiamato
- 23. Come ottenere il nome file del modulo __main__ in Python?
- 24. Come ottenere il nome/percorso del file Excel in VBA
- 25. Ottenere il nome del file in batch per ciclo
- 26. Ereditarietà: esiste un modo per scoprire la classe da cui è stato chiamato un metodo?
- 27. Ottieni il nome del metodo corrente
- 28. Qual è il file .tt in Ruby
- 29. Come identificare il nome della forma su cui è stato fatto clic in VBA
- 30. Qual è un buon modo per ottenere il nome file da un URL in Ruby?
C'è anche un metodo '' absolute_path' sulla Discussione :: :: Backtrace location' se si desidera che il percorso completo al file. – ReggieB