Можно просто использовать ContentResult
для возврата простой строки:
public ActionResult Temp() {
return Content("Hi there!");
}
ContentResult
значением по умолчанию возвращается text/plain
как contentType. Это сверхзагружаемо, таким образом, можно также сделать:
return Content("This is poorly formatted xml. ", "text/xml");
Ну, два других ответа наполовину правы. Вот рабочее решение, которое на самом деле сортирует:
package Foo;
use strict;
use warnings;
sub sort {
my ($self, $sub) = @_;
my ($pkg) = caller;
my @x = qw(1 6 39 2 5);
print "@x\n";
{
no strict 'refs';
@x = sort {
local (${$pkg.'::a'}, ${$pkg.'::b'}) = ($a, $b);
$sub->();
} @x;
}
print "@x\n";
return;
}
package main;
use strict;
use warnings;
my $foo = {};
bless $foo, 'Foo';
$foo->sort(sub { $a <=> $b });
# 1 6 39 2 5
# 1 2 5 6 39
Предположительно, вы должны отсортировать некоторые данные, которые на самом деле являются частью объекта.
Вам нужна магия вызывающего
, чтобы вы локализовали $ a
и $ b
в пакете вызывающей стороны, где Perl будет их искать. Он создает глобальные переменные, которые существуют только во время вызова этой подпрограммы.
Обратите внимание, что вы получите «имя используется только один раз» с предупреждениями
; Я уверен, что есть некоторые обручи, через которые вы можете каким-то образом избежать этого.
Вы можете использовать локальный оператор
для установки значений для $ a
и $ b
на время вызова подпрограммы:
sub sample
{
my $callback = shift;
for (my $i = 0; $i < @_; $i += 2) {
local ($a, $b) = @_[$i, $i + 1];
$callback->();
}
}
sample sub { print "$a $b\n" }, qw(a b c d e f g h i j);
Если у вас есть обычная подпрограмма, а не метод, вы можете сделайте его еще более похожим на sort
, чтобы вы не Нет необходимости использовать sub
перед функцией обратного вызова. Используйте прототип функции:
sub sample (&@)
Затем вы вызываете ее так:
sample { print "$a $b\n" } qw(a b c d e f g h i j);
Однако на методы не влияют прототипы.
Вы можете использовать Sub :: Identify , чтобы узнать пакет (который он называет stash_name
), связанный с coderef. Затем установите $ a и $ b в этом пакете по мере необходимости. Возможно, вам придется использовать в методе no strict 'refs'
, чтобы это работало.
Вот Evee ' ответ изменен для работы в общем случае:
use strict;
use warnings;
package Foo;
use Sub::Identify 'stash_name';
sub sort {
my ($self, $sub) = @_;
my $pkg = stash_name($sub);
my @x = qw(1 6 39 2 5);
print "@x\n";
{
no strict 'refs';
@x = sort {
local (${$pkg.'::a'}, ${$pkg.'::b'}) = ($a, $b);
$sub->();
} @x;
}
print "@x\n";
return;
}
package Sorter;
sub compare { $a <=> $b }
package main;
use strict;
use warnings;
my $foo = {};
bless $foo, 'Foo';
$foo->sort(\&Sorter::compare );
$foo->sort(sub { $b <=> $a });