সাধারণ অনুরোধ.এল ব্যবহার


9

আমার বিব্রতকরভাবে সহজ প্রশ্নটি নিম্নলিখিত:

নিম্নলিখিত কোডটি কেন কাজ করে:

(require 'request)

(defun geocoder ()
  (request
   "http://rpc.geocoder.us/service/csv"
   ;;; **Hardcoded parameter!**
   :params '(("address" . "1600 Pennsylvania Ave, Washington DC"))
   :parser 'buffer-string
   :success (function*
             (lambda (&key data &allow-other-keys)
                (when data
                (with-current-buffer (get-buffer-create "*request demo*")
                  (erase-buffer)
                  (insert data)
                  (pop-to-buffer (current-buffer))))))
   :error
   (function* (lambda (&key error-thrown &allow-other-keys&rest _)
                (message "Got error: %S" error-thrown)))
   ))

(geocoder)

এই এক না যখন?

(require 'request)

(defun geocoder (address) ;; adding a parameter!
  (request
   "http://rpc.geocoder.us/service/csv"
   :params '(("address" . address))
   :parser 'buffer-string
   :success (function*
             (lambda (&key data &allow-other-keys)
                (when data
                (with-current-buffer (get-buffer-create "*request demo*")
                  (erase-buffer)
                  (insert data)
                  (pop-to-buffer (current-buffer))))))
   :error
   (function* (lambda (&key error-thrown &allow-other-keys&rest _)
                (message "Got error: %S" error-thrown)))
   ))

;;; Now with parameter!
(geocoder "1600 Pennsylvania Ave, Washington DC")

অনুরোধ করার জন্য কীভাবে আমার একটি পরামিতি প্রেরণ করা উচিত?

উত্তর:


12

এ কারণে যে '(("address" . address))হয় উদ্ধৃত (অর্থাত দ্বারা পূর্বে সমাধান ', যার মানে যে কি ভিতরে মূল্যায়ন না হয়ে যায় অপারেটর)। requestফাংশন এইভাবে একটি আর্গুমেন্ট যা unevaluated সঙ্গে বলা পরার address প্রতীক (যেহেতু আপনার প্রথম বাস্তবায়নের, requestফাংশন একটি স্ট্রিং litteral, যা প্রথম মূল্যায়ন করা দরকার নেই পায়)।

আপনি এটি 2 উপায়ে সমাধান করতে পারেন:

1) আর্গুমেন্টের পরিমাণটি উদ্ধৃত করা , যা আপনাকে বেশিরভাগ ক্ষেত্রে একই আচরণ করতে দেয় তবে এমন অংশগুলি নির্দিষ্ট করতে দেয় যা এখনও মূল্যায়ন করা দরকার:

`(("address" . ,address))

নোট করুন যে একক উদ্ধৃতি ( ') একটি ব্যাককোয়াইট ( `) দ্বারা প্রতিস্থাপিত হয়েছে , এবং এটির মূল্য নির্ধারণ করা উচিত এবং এর মানটির সাথে প্রতিস্থাপন করা উচিত তা নির্দেশ করার ,আগে একটি বিশেষ চিহ্নিতকারী যুক্ত করা হয়েছিল address

2) (@ জর্ডনবিওনডোর মন্তব্য অনুসারে) কাঠামোটি পরিষ্কারভাবে listবা যেমন আদিম ব্যবহার করে কাঠামো তৈরি করাcons । আপনার ক্ষেত্রে, এটি এইভাবে করা হবে:

(list (cons "address" address))

যেখানে আবার, "address"একটি স্ট্রিং আক্ষরিক (যা নিজের কাছে মূল্যায়ন করে), এবং addressএটি ফাংশন কলের আর্গুমেন্টের কারণে মূল্যায়ন হয়।


ব্যাখ্যার জন্য ধন্যবাদ. এটি উন্নতি করছে, তবে এখন আমি পেয়েছি "ভুল টাইপ আর্গুমেন্ট: পূর্ণসংখ্যা, \," :(
বাওল

আহ, ঠিক আছে: gnu.org/software/emacs/manual/html_node/elisp/Quoting.html এটি একটি ব্যাককোট !!
বাওল

1
আমি এটি স্পষ্ট করার জন্য ম্যানুয়ালটির প্রাসঙ্গিক অংশগুলির সাথে লিঙ্কগুলি যুক্ত করেছি। এবং আমি স্পষ্টভাবে ব্যাককোটটির কথাও উল্লেখ করেছি যেহেতু এটি প্রথম নজরে অবাক হওয়ার মতোই স্পষ্ট ছিল না ...
ফ্রান্সোয়েস ফ্যাভোট

6
বিকল্পভাবে আপনি লিখতে (list (cons "address" address))পারেন যেন আপনি ব্যাকটিক্স ব্যবহার করতে চান না
জর্ডন বিওনডো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.