क्या मैं एक विधि को चालू कर सकता हूं जो किसी फ़ंक्शन में अंतर्निहित पैरामीटर लेता है?आंशिक रूप से एक फ़ंक्शन को लागू करना जिसमें अंतर्निहित पैरामीटर
trait Tx
def foo(bar: Any)(implicit tx: Tx) {}
foo _ // error: could not find implicit value for parameter tx: Tx
मैं अधिमानतः अगर मैं किसी भी तरह यह स्पष्ट कॉल withSelection(deleteObjects)
के साथ काम कर सकते हैं, निम्नलिखित प्राप्त करने के लिए कोशिश कर रहा हूँ: हालांकि इसके साथ सौदा नहीं है
trait Test {
def atomic[A](fun: Tx => A): A
def selection: Iterable[Any]
def withSelection(fun: Iterable[Any] => Tx => Unit) {
val sel = selection
if (sel.nonEmpty) atomic { implicit tx =>
fun(sel)(tx)
}
}
object deleteAction {
def apply() {
withSelection(deleteObjects) // !
}
}
def deleteObjects(xs: Iterable[Any])(implicit tx: Tx): Unit
}
मैं this question पाया, जहां तक मैं देख सकता हूं विधियों से कार्य करने के लिए।
आपके दूसरे मामले (यानी फाइलकॉन्टर) के बारे में, क्या आप एक अंतर्निहित रूपांतरण 'अंतर्निहित डीफ काउंटरटोएसिंक (सी: फाइलकॉन्टर): AsyncFileCounter = c.async' परिभाषित नहीं कर सकते हैं ताकि आप एक बार फिर counter.countFiles ("/") ' –
अच्छा! मेरे मामले में अंतर्निहित रूपांतरण समेकित विधियों द्वारा समान ऑब्जेक्ट पर मौजूद समान हस्ताक्षर के साथ पराजित किया जाएगा। हालांकि, यह निश्चित रूप से एक अच्छा बॉयलरप्लेट कामकाज है! मुझे वास्तव में यह सत्यापित करने की आवश्यकता है कि बचने का विश्लेषण वास्तव में Async ऑब्जेक्ट के लिए ढेर आवंटन को समाप्त करता है। – nadavwr
मैं कहूंगा कि सिंक्रोनस विधियों के पास एक अलग हस्ताक्षर होगा, क्योंकि वे 'भविष्य [ए]' नहीं बल्कि एक 'ए' वापस नहीं करेंगे, इसलिए संकलक आपको बता सकता है।आपको बस उन क्षेत्रों को सीमित करना चाहिए जहां आपको एसिंक कॉल की आवश्यकता है और वहां पर लागू रूपांतरण आयात करें। ढेर आवंटन से बचने के लिए मैं उस पर शर्त नहीं लगा सकता ... –