एक पर्ल ऑब्जेक्ट की विधि के भीतर मैं चर की सूची पर एक और विधि कॉल करना चाहता हूं। इस तरह से मानचित्र का उपयोग करने से काम नहीं चलता:
($open, $high, $low, $close)
= map( $self->adjust_for_factor, ($open, $high, $low, $close) );
....
sub adjust_for_factor {
my $self = shift;
my $price = shift;
return $price * $self->get_factor ;
}
यह काम करता है, हालांकि यह बदसूरत है और स्केल नहीं करता है। मुझे यकीन है कि यहां मानचित्र का उपयोग करना संभव होगा:
($open, $high, $low, $close)
= ( $self->adjust_for_factor($open)
, $self->adjust_for_factor($high)
, $self->adjust_for_factor($low)
, $self->adjust_for_factor($close) );
मुझे लगता है कि यह स्वयं को सही तरीके से संदर्भित करने का मुद्दा है। मुझे यह समझने में परेशानी हो रही है कि यह सब एक साथ कैसे फिट बैठता है।
उन सभी को धन्यवाद जिन्होंने विचार करने/प्रतिक्रिया देने के लिए समय निकाला।
3 जवाब
जैसा कि @tchrist ने कहा, आप अपने तरीके से $_
पास करना भूल गए। सही तरीका होगा
($open, $high, $low, $close)
= map $self->adjust_for_factor($_), $open, $high, $low, $close;
आप विधि को संशोधित भी कर सकते हैं ताकि वह एक सूची स्वीकार कर सके:
sub adjust_for_factor {
my ($self, @prices) = @_;
return map $_ * $self->get_factor, @prices;
}
($open, $high, $low, $close)
= $self->adjust_for_factor($open, $high, $low, $close);
आप अपने ऑब्जेक्ट की विधि (टोपी टिप tchrist) के लिए एक पैरामीटर पास करना भूल गए हैं, यहाँ एक कार्यशील उदाहरण है:
$ cat l1.pl
use strict;
package p;
sub new { return bless({factor => $_[1]}, $_[0]); }
sub get_factor { return $_[0]->{factor}; }
sub adjust_for_factor {
my ($self, $price) = @_;
return $price * $self->get_factor;
}
package main;
my $obj = p->new(3); # Don't use "self" for object name outside object's class!
my @res = map ($obj->adjust_for_factor($_), qw(1 2 3));
print join(", ", @res) . "\n";
$ ./l1.pl
3, 6, 9
($open, $high, $low, $close) =
map $self->adjust_for_factor, $open, $high, $low, $close;
होना चाहिए
($open, $high, $low, $close) =
map $self->adjust_for_factor($_), $open, $high, $low, $close;
जिसे छोटा किया जा सकता है
$_ = $self->adjust_for_factor($_)
for $open, $high, $low, $close;
संबंधित सवाल
नए सवाल
perl
पर्ल एक प्रक्रियात्मक, उच्च-स्तरीय, सामान्य-प्रयोजन, गतिशील प्रोग्रामिंग भाषा है, जिसे नियमित अभिव्यक्ति और स्ट्रिंग पार्स क्षमताओं के मूल समर्थन के लिए जाना जाता है। कृपया सामान्य रूप से पर्ल के बारे में प्रश्नों के लिए इस टैग का उपयोग करें। नई (लेकिन संबंधित) भाषा Raku (पूर्व में "पर्ल 6") से संबंधित चीजों के लिए, कृपया raku टैग का उपयोग करें। अन्य भाषाओं में पर्ल-स्टाइल नियमित अभिव्यक्तियों के लिए, रेगेक्स टैग का उपयोग करें, या, यदि वे पीसीआरई लाइब्रेरी, पीसीआर टैग पर आधारित हैं।
map
को एक तर्क के साथ बुलाए जाने पर छोड़ देना चाहिए ताकि यह स्केलर संदर्भ में एक तर्क के साथ एक समझदार चीज़ लौटाए।return $self->get_factor * $prices[0] if @prices == 1;
या ऐसा ही कुछ।