Вы хотите объект proc:
gaussian = Proc.new do |dist, *args|
sigma = args.first || 10.0
...
end
def weightedknn(data, vec1, k = 5, weightf = gaussian)
...
weight = weightf.call(dist)
...
end
Просто примечание, что Вы не можете установить параметр по умолчанию в объявлении блока как этот. Таким образом, необходимо использовать нащельную рейку и установить значение по умолчанию в самом коде proc.
<час>Или, в зависимости от Вашего объема всего этого, может быть легче передать в имени метода вместо этого.
def weightedknn(data, vec1, k = 5, weightf = :gaussian)
...
weight = self.send(weightf)
...
end
В этом случае Вы просто называете метод, который определяется на объекте вместо того, чтобы передать в полном блоке кода. В зависимости от того, как Вы структурируете это, Вы, возможно, должны заменить self.send
object_that_has_the_these_math_methods.send
Наконец, что не менее важно, можно подвесить блок от метода.
def weightedknn(data, vec1, k = 5)
...
weight =
if block_given?
yield(dist)
else
gaussian.call(dist)
end
end
...
end
weightedknn(foo, bar) do |dist|
# square the dist
dist * dist
end
, Но это кажется на симпатию большего количества допускающих повторное использование блоков кода здесь.
Ни то, ни другое не является более эффективным, использование метода WHERE считается старым способом ( http://msdn.microsoft.com/en-us/library/ms190014.aspx ). Вы можете посмотреть на план выполнения и увидеть, что они делают то же самое.
вы увидите событие здесь. Обычно это нажатия клавиш, которые не влияют на текст в элементе управления, например в текстовом поле.ControlText: Это текстовые события элемента управления, то есть: если вы нажмете Ctrl + буква, вы увидите его здесь. Подобно SystemText.
Обычно, если вы просто ищете стандартные «текстовые» события, вам просто нужно посмотреть на свойство «Текст». Подробнее см. Обзор входа .