Предупреждающее сообщение «Подразделение на ноль» является одним из наиболее часто задаваемых вопросов среди новых разработчиков PHP. Эта ошибка не вызовет исключения, поэтому некоторые разработчики иногда будут подавлять предупреждение, добавляя оператор подавления ошибок @ перед выражением. Например:
$value = @(2 / 0);
Но, как и при любом предупреждении, наилучшим подходом было бы отслеживать причину предупреждения и разрешать его. Причина предупреждения будет происходить из любого экземпляра, где вы пытаетесь разделить на 0, переменную, равную 0, или переменную, которая не была назначена (поскольку NULL == 0), потому что результат будет «неопределенным».
Чтобы исправить это предупреждение, вы должны переписать свое выражение, чтобы проверить, что значение не равно 0, если оно есть, сделать что-то еще. Если значение равно нулю, вы не должны делиться или изменять значение на 1, а затем делить так, что деление приводит к эквиваленту того, что он разделен только дополнительной переменной.
if ( $var1 == 0 ) { // check if var1 equals zero
$var1 = 1; // var1 equaled zero so change var1 to equal one instead
$var3 = ($var2 / $var1); // divide var1/var2 ie. 1/1
} else {
$var3 = ($var2 / $var1); // if var1 does not equal zero, divide
}
Вопросы, относящиеся:
require 'pathname'
Pathname.new('/opt/local/bin/ruby').basename
# => #<Pathname:ruby>
я не был пользователем Windows в долгое время, но Путь rdoc говорит, что не имеет никаких проблем с разделителями имени каталога в Windows.
Попробуйте File.basename
Возвраты последний компонент имени файла, данного в file_name, который должен быть сформирован с помощью наклонных черт вправо (' '/’’) независимо от разделителя, используемого в локальной файловой системе. Если суффикс дан и существует в конце file_name, он удален.
File.basename("/home/gumby/work/ruby.rb") #=> "ruby.rb" File.basename("/home/gumby/work/ruby.rb", ".rb") #=> "ruby"
В Вашем случае:
File.basename("C:\\projects\\blah.dll", ".dll") #=> "blah"
В случае, если расширение не известно (ему нужно / разделитель):
irb(main):024:0> f = 'C:\foobar\blah.txt'.gsub("\\","/")
=> "C:/foobar/blah.txt"
irb(main):027:0> File.basename(f,File.extname(f))
=> "blah"
Ответ Jonathon лучше, но сообщать somelist[-1]
- один из эти LastIndexOf
доступные нотации.
, Поскольку krusty.ar упомянул somelist.last
, по-видимому, также.
irb(main):003:0* f = 'C:\\path\\file.txt'
irb(main):007:0> f.split('\\')
=> ["C:", "path", "file.txt"]
irb(main):008:0> f.split('\\')[-1]
=> "file.txt"
Обратите внимание, что строки двойных кавычек выходят из \.
'C:\projects\blah.dll'.split('\\').last
Если у вас есть доступ к переменным ENV, сканирование
в сочетании с этим маленьким регулярным выражением (которое находит предпоследнее слово, точку, а затем последнее слово строки) поместит имя файла в 'filename':
filename = ENV['SCRIPT_NAME'].scan(/\w+\.\w+$/)
Очевидно, вы можете использовать scan
и регулярное выражение для любого пути, который включает имя файла, и __ FILE __
является очевидным выбором:
__FILE__.scan(/\w+\.\w+$/)