Public Function LastData(rCol As Range) As Range
Set LastData = rCol.Find("*", rCol.Cells(1), , , , xlPrevious)
End Function
Использование: ?lastdata(activecell.EntireColumn).Address
Я настоятельно рекомендую использовать .each
, .inject
и / или .collect
. Например:
# Sum 1,3,5,7,9,11,13
[1,3,5,7,11,13].inject { |a,b| a+b }
или
# Print out all of the files in a directory
Dir.glob('./my_cool_directory/*').each do |file|
puts file
end
или
# Find the length of all of the strings
["test", "hello there", "how's life today?"].collect{ |string| string.length }
Покажите им, как вы преобразовываете 50 уродливых строк грязного кода в 3 чистых подхода к очень легкому для понимания программному обеспечению. (Это первая строка комментария)
Не показывай, насколько ты крут с рубином. Но как они будут крутыми, если будут использовать рубин :)
Я впечатлен тем, что можно сделать с помощью tweetstream. Так легко отслеживать популярные темы.
установите с помощью:
gem sources -a http://gems.github.com
gem install intridea-tweetstream
Вот демонстрационный код:
#!/usr/local/bin/ruby
if ARGV.size==1
keyword = ARGV.shift
else
puts 'tweetmon usage: tweetmon <keyword>'
exit 1
end
require 'yaml'
require 'rubygems'
require 'tweetstream'
config = YAML::load(File.open(File.expand_path('~/.twitter')))
user =config['username']
password =config['password']
TweetStream::Client.new(user,password).track(keyword) do |status|
puts "[#{status.created_at}-#{status.user.screen_name}] #{status.text}"
end
Вам нужно создать файл с именем .twitter в корневом каталоге вашего пользователя в форме:
username: my-twitter-username
password: my-twitter-password
Обратите внимание, как ruby читает эту конфигурацию всего в 4 строках (включая yaml require.)
Вы запускаете его так:
ruby tweetmon.rb keyword-to-be-monitored
(Помните, что вам нужно экранировать # на mac / linux, например:
tweetmon.rb \ #devdays
)
Из такого простого фрагмента вы можете делать такие вещи, как подсчитывать, сколько раз каждый человек вносит свой вклад, записывать сегменты потока твитов в файл и т. Д. с этой отправной точки ...
irb(main):007:0> 2**2048
=> 32317006071311007300714876688669951960444102669715484032130345427524655138867
89089319720141152291346368871796092189801949411955915049092109508815238644828312
06308773673009960917501977503896521067960576383840675682767922186426197561618380
94338476170470581645852036305042887575891541065808607552399123930385521914333389
66834242068497478656456949485617603532632205807780565933102619270846031415025859
28641771167259436037184618573575983511523016459044036976132332872312271256847108
20209725157101726931323469678542580656697935045997268352998638215525166389437335
543602135433229604645318478604952148193555853611059596230656
попробуйте 2 ** 20000
или любое другое нелепое большое число.
Если вы знакомы с Java, создайте список строк, отсортируйте его с помощью собственного компаратора (длина строки) и распечатайте список. Сделайте то же самое в Ruby ...
Вы должны полностью показать им массив Двемти, он очень хорошо говорит о силе, заключенной в метапрограммировании в Ruby.
Ruby мне нравится, потому что он часто позволяет мне делать то, что я хочу, вместо того, чтобы тратить много времени на «настройку» решения. Итак, несколько примеров:
Суммируйте неотрицательные числа в массиве [-1, 3, -10, 0, 5, 8, 16, -3.14159]
[-1, 3, -10, 0, 5, 8, 16, -3.14159].select { |x| x > 0 }.inject { |acc, x| acc + x }
По сравнению с формой, общей для других языков:
sum = 0;
foreach (x in [-1, 3, -10, 0, 5, 8, 16, -3.14159]) {
if(x > 0) sum += x;
}
return x;
Простая обработка исключений
x = method_that_might_raise_exception() rescue nil
По сравнению с:
try {
x = method_that_might_raise_exception()
} catch (Exception) {
x = nil
}
Конечно, вы можете делать больше с генерируемыми исключениями, и Ruby позволяет вам, но когда вы хотите, чтобы все было просто, Ruby не стоит в
Открытые классы Ruby - изящная тема, хотя ими можно злоупотреблять:
class Array
def sum_of_squares
map { |x| x * x }.inject { |acc, x| acc + x }
end
end
[1, 3, 5, 9].sum_of_squares
Есть также богатая тема метапрограммирования, но это может быть слишком много для введения в Ruby? Я надеюсь, что кое-что здесь было полезно для вас, и я хотел бы поддержать мнение графика.
Вот несколько классных примеров рубинов, которые я скомпилировал за эти годы:
Корректор заклинаний Норвига в Ruby:
http://norvig.com/spell-correct.html
http://lojic.com/blog/2008/09/04 / how-to-write-a-spelling-corrector-in-ruby /
AMB в Ruby:
http://www.randomhacks.net/articles/2005/10/11/amb-operator
Я бы показал, насколько просто создавать красивые dsl - в частности, method_missing действительно прост для понимания, но очень мощный и позволяет делать действительно классные вещи.